在ios5之前,是没有ARC的,所以内存靠自己手动回收或者使用autorelease.下面来介绍非ARC的情况,假定有两个指针a和b.
1.关键字asign。针对的情况就是直接赋值,只针对基本类型,比如int float double short bool char long等。它只进行直接赋值,不进行引用计数,所以也不用管理内存。
2.关键字retain。假定指针a指向了一块内存区域,我们又将b指向了这块内存,这时候我们假定指针a不再使用,我们是否可以释放掉这块内存?答案是很明显的。不能!因为b还 在使用这块内存,如果释放,就会crash掉。所以引入了引用计数功能。retain就是计数+1,当我们对属性设定了retain关键字时,alloc init就会对内存计数+1
3.关键字release.release和第二条刚好相反,进行引用技术-1操作。当引用技术为0时,dealloc会被调用,内存被回收。如果指针a指向了两块内存,那么就应该调用两次release。
4.关键字copy。copy的意思就是复制了两块内存。
5.关键字atomic。此属性只支持同步操作,也就是线程安全的。
6.关键字nonatomic。支持异步操作,非线程安全。
7.关键字autorelease。如果a指向的对象是autorelease的,那么我们将不用对a进行release操作。当a不再使用时,a将进入NSAutoReleasePool. a的生命周期将会被延长,当pool drain的时候,a才会被销毁。应用启动的时候会初始化一个NSAutoReleasePool.在main函数里。
8.NSAutoReleasePool介绍。
初始化的方法为:NSAutoreleasePool *subPool = [[NSAutoreleasePool alloc] init];
释放的方法非release而是[subPool drain];
以下英文摘自苹果官方文档。
In a garbage collected environment, release is a no-op. NSAutoreleasePool therefore provides a drain method that in a reference-counted environment behaves the same as calling release, but which in a garbage collected environment triggers garbage collection (if the memory allocated since the last collection is greater than the current threshold). Typically, therefore, you should use drain rather than release to dispose of an autorelease pool.
使用场景:1.当我们使用autorelease管理的内存过大时,应自己初始化一个pool并执行回收,因为pool管理的内存回收的时间是不确定的。 2.当我们新起一个线程的时候,如果我们用到了autorelease,我们应当自己初始化一个pool,因为主线程是不管理新起线程的autorelease的。
分享到:
相关推荐
庄延军《iOS内存管理及优化》,一本不错的关于ios内存管理的书。
IOS内存管理与软件调试,本文档介绍了iOS内存管理和软件调试方法,如何找到crash的原因,文档为英文的,不喜欢的请勿下载。
10天掌握IOS 内存管理
iOS内存管理暴风体育 分享 iOS引用计数查看引用计数:MRC: [object retainCount]强引用/弱引用普通指针: void *强引用:类似B
小议iOS内存管理-中文.pdf
ios移动开发的内存管理ppt,讲的不错,你值得拥有
通过对不同类型的对象进行retain和copy进行深浅拷贝详细测试分析
iOS高级内存管理ARC模式手动模式英文文档含示例工程,本压缩包包含国外众多高手的内存管理心得和工程示例,文档为英文,不喜欢的请勿下载。
5.1)Objective-C内存管理相关术语 5.2)什么是引用计数? 5.2.1)引用计数解释 5.2.2)文艺解释 5.2.3)代码测试 5.3)自动释放池 5.3.1)AutoreleasePool的原理 5.3.2)自动释放池的创建和销毁 5.3.3)自动释放池的使用...
IOS的内存管理详解。 Delegate具体详解,使用流程。 Speex的语音压缩技术。 完整详细解读。40页,通俗简单,深入浅出,并有代码示例ppt。
ios内存管理之遛狗原则,还有自定义数组管理内存
iOS开发有关object-c内存管理!
如何检测内存泄漏? 如何解决循环引用? 悬垂指针?野指针? 对 retain,copy,assign,weak,_Unsafe_Unretain 关键字的理解; 深拷贝和浅拷贝的深刻理解;...自动引用计数应遵循的原则;...内存管理方案 ... ... ...
3.未初始化数据:末初始化的全局变量、静态变量等 1.对字符串,字典,数组进行mutableCopy操作,属于深拷贝,并且会生成一个新的可变对象 2.对可变字符
介绍IOS内存管理的一本电子书,初学者可以很快的了解ios上的内存管理的机制,有一定经验的也可以从中得到新的收获。
强引用、弱引用 weak和strong只有你打开ARC时才会被要求使用
深入介绍IOS内存管理和多线程操作,有助于提高ios开发水命
关于iOS内存管理的规则思考 自己生成的生成的对象,自己持有。 非自己生成的对象,自己也能持有。 不在需要自己持有的对象时释放。 非自己持有的对象无法释放。 注:这里的自己是对象使用的环境,理解为编程人员...