iOS内存问题

早在iOS5.0的时候苹果就引入了ARC的自动管理机制,刚出来的时候,ARC模式还不是很健全,会存在内存泄漏问题,但是现在的ARC已经基本取代了MRC的管理方式,所以我们只需要了解一下MRC,知道ARC的原理即可。

1.简单介绍一下@property属性修饰

1.weak:
1>修饰弱引用的OC对象
2.assign:
1>修饰弱引用的OC对象
2>修饰基本数据类型
3.strong
1>修饰强引用的OC对象
4.copy
1>修饰NSString类型
2>修饰block
5.使用weak和assign修饰OC对象的区别
1>成员变量
1)weak生成的成员变量是用__weak修饰的
2)assign生成的成员变量是用__unsafe_unretained修饰的
2>__weak和__unsafe_unretained
1)都不是强指针(不是强引用),不能保住对象的命
2)__weak : 所指向的对象销毁后,会自动变成nil指针(空指针),不再指向已经销毁的对象
3)__unsafe_unretained : 所指向的对象销毁后,仍旧指向已经销毁的对象

2.野指针的查找

在iOS工程中有时会碰到“EXC_BAD_ACCESS”的错误提示

“EXC_BAD_ACCESS”的错误提示
因为只知道错误的地方,不知道具体crash的原因,所以很难查找,这时最好开启僵尸对象模式(开启僵尸对象会让程序的编译时间延长,所以一般不打开)

步骤一:

步骤二:
这时再次运行程序,crash时,会打印出更多的日志信息

2012-11-28 13:22:08.911 PropMemFun[2132:11303] * -[CFString respondsToSelector:]: message sent to deallocated instance 0x713ebc0

更多的日志信息

3.静态内存泄漏检测

当APP完成之后,要查看内存是否存在泄漏问题。使用Xcode的Analyze就可以分析出哪里存在内存泄漏

Analyze


根据描述信息来修改内存泄漏

4.动态内存泄漏检测

静态内存分析泄漏有时可能不能把所有的内存泄漏查出来,但是动态检测定位代码不太准确

步骤一:

步骤二:

步骤三:

出现红色的格子则代表内存泄漏

内存泄漏

下面就是最重要的定位了
1.模式改选为”Call Tree”模式
2.设置中改为如下设置,来显示内存泄漏的代码
3.双击代码就会显示出泄漏的代码(ps:这个定位不是太准确)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值