深度:ARC会导致的内存泄露

news/2024/7/20 15:31:20 标签: 内存管理

iOS提供了ARC功能,很大程度上简化了内存管理的代码。

但使用ARC并不代表了不会发生内存泄露,使用不当照样会发生内存泄露。

下面列举两种内存泄露的情况。

1,循环参照

A有个属性参照B,B有个属性参照A,如果都是strong参照的话,两个对象都无法释放。

这种问题常发生于把delegate声明为strong属性了。

例,

@interface SampleViewController

@property (nonatomic, strong) SampleClass *sampleClass;

@end

@interface SampleClass

@property (nonatomic, strong) SampleViewController *delegate;

@end

 

上例中,解决办法是把SampleClass 的delegate属性的strong改为assing即可。

 

2,死循环

如果某个ViewController中有无限循环,也会导致即使ViewController对应的view关掉了,ViewController也不能被释放。

这种问题常发生于animation处理。

例,

比如,

CATransition *transition = [CATransition animation];

transition.duration = 0.5;

tansition.repeatCount = HUGE_VALL;

[self.view.layer addAnimation:transition forKey:"myAnimation"];

 

上例中,animation重复次数设成HUGE_VALL,一个很大的数值,基本上等于无限循环了。

解决办法是,在ViewController关掉的时候,停止这个animation。

-(void)viewWillDisappear:(BOOL)animated {

    [self.view.layer removeAllAnimations];

}

 

内存泄露的情况当然不止以上两种。

即使用了ARC,我们也要深刻理解iOS的内存管理机制,这样才能有效避免内存泄露。

转载于:https://www.cnblogs.com/lovewx/p/4023850.html


http://www.niftyadmin.cn/n/1293800.html

相关文章

python自动化框架pycharm_Selenium+Python+Pycharm进行自动化

最近研究新的自动化测试方法,QTP已经用的比较熟练,待开发新的方法,这里做个记录和大家共勉。1、首先肯定是配置环境了,一步一步来吧,先下载需要的工具:下载一个python的环境,我这里用的Python3.…

链路追踪在开源SpringBoot/SpringCloud微服务框架的最简实践

目录导读 链路追踪在开源SpringBoot/SpringCloud微服务框架的实践1. 开源代码整体设计2. 微服务逻辑架构设计3. 链路追踪框架选型3.1 为什么要引入链路追踪3.2 链路追踪能做什么3.3 当下链路追踪框架对比3.4 在项目中引入zipkin 4. SpringBoot服务引入zipkin5. Spring-Security…

struts-上传

一、创建项目 项目名称:demoupload二、添加jar包 commons-fileupload-1.2.2.jar commons-io-2.0.1.jar commons-lang3-3.1.jar freemarker-2.3.19.jar javassist-3.11.0.GA.jar ognl-3.0.5.jar struts2-core-2.3.4.1.jar xwork-core-2.3…

Java 执行 SQL 脚本文件

2019独角兽企业重金招聘Python工程师标准>>> 转自:http://blog.csdn.net/hongmin118/article/details/4588941 1 package com.unmi.db;2 3 import java.io.FileInputStream;4 import java.io.InputStream;5 import java.sql.Connection;6 import java.sq…

contos下安装JDK1.7 ,tomcat,nginx

CentOS下的JDK安装(jdk1.7.0.67) 1>cd /usr/local 2>tar -zxvf jdk-7u67-linux-x64.tar.gz 3>rm -rf jdk-7u67-linux-x64.tar.gz //删除压缩包 4>mv jdk1.7.0_67 java //jdk1.7.0_67重命名为java 3>在 /etc/profile 文件末尾添加 环境变量(配置jd…

为自己的个人项目挤出时间的10个绝妙的方法

2014-5-9 10:41|发布者: vincy西西1010|查看: 2390|评论: 3|来自: 极客范 摘要: 你的脑海里有没有不停跳动的热情呢?或者是一个点子?是什么阻止你停滞不前?也许是在10小时的工作过后又经过了1小时通勤。我知道那种感觉。我曾经也是这样。在很…

centos系统常用操作命令

一、目录操作命令 ls命令 — 功能说明&#xff1a;显示文件和目录列表。 — 命令格式&#xff1a;ls [参数] [<文件或目录> …] — 常用参数&#xff1a; -a : 不隐藏任何以“.”字符开始的条目。 -b : 用八进制形式显示非打印字符。 -R : 递归列出所有子目录。 -d : 当遇…

linux centos 6.0 nfs搭建

在启动NFS SERVER之前&#xff0c;首先要启动rpcbind服务&#xff08;即老版本portmap服务&#xff0c;&#xff09;否则NFS SERVER 就无法向RPC服务注册&#xff0c;另外&#xff0c;如果RPC服务重新启动&#xff0c;原来已注册好的NFS端口数据就会丢失&#xff0c;因此&…