iOS内存问题

早在iOS5.0的时候苹果就引入了ARC的自动管理机制,刚出来的时候,ARC模式还不是很健全,会存在内存泄漏问题,但是现在的ARC已经基本取代了MRC的管理方式,所以我们只需要了解一下MRC,知道ARC的原理即可。
<h5>1.简单介绍一下@property属性修饰</h5>
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 : 所指向的对象销毁后,仍旧指向已经销毁的对象
<h5>2.野指针的查找</h5>
在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

更多的日志信息

<h5>3.静态内存泄漏检测</h5>
当APP完成之后,要查看内存是否存在泄漏问题。使用Xcode的Analyze就可以分析出哪里存在内存泄漏

Analyze

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

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

步骤一:
步骤二:
步骤三:

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

内存泄漏

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. 用ARC管理内存 ARC(Automatic ReferenceCounting, 自动引用计数)和iOS5...
    Icec阅读 5,461评论 0 7
  • 相对电脑而言,移动设备具有内存少、CPU速度慢等特点,因此iOS开发人员需要尽可能优化应用的性能。性能优化需要考虑...
    攻克乃还_阅读 2,905评论 0 0
  • iOS内存问题: IBOutlet为啥是weak的?因为subview添加到view上时,view会“拥有”sub...
    davidxwwang阅读 5,449评论 0 1
  • 内存管理的基本范围和概念. 程序运行过程中药创建大量的对象, 和其他高级语言类似,在ObjC中对象存储在堆区,程序...
    ValienZh阅读 4,427评论 0 2
  • 冯·诺依曼体系:运算器 控制器 存储器 输入与输出 内存即存储器,用来存储指令与数据 注:哈佛体系与普林斯顿体系的...
    小李龍彪阅读 3,868评论 0 8

友情链接更多精彩内容