之前写过类似的文章,这篇以做总结,希望能帮助刚上船的兄弟。_ iPhone 系统中的 Objective-C 的内存管理机制是比较灵活的,即可以拿来像 C/C++ 一样用,也可以加个 AutoreleasePool 让它升级为半自动化的内存管理语言。当然,也不能拿 JAVA 虚拟机中的全自动化 GC 来比? 引用计数是实例对象的内存回收唯一参考引用计数(retainCount) 是 Objective-C 管理对象引用的唯一依据。调用实例的 release 方法后, 此属性减一, 减到为零时对象的 dealloc 方法被自动调用, 进行内存回收操作, 也就是说我们永不该手动调用对象的 dealloc 方法。它的内存管理API老简单老简单了,下面就是它主要操作接口: 1, alloc, allocWithZone,new( 带初始化) 为对象分配内存, retainCount 为“1”,并返回此实例 2, retain retainCount 加“1” 3, copy,mutableCopy 复制一个实例, retainCount 数为“1”,返回此实例。所得到的对象是与其它上下文无关的,独立的对象( 干净对象)。 4, release retainCount 减“1”,减到“0”时调用此对象的 dealloc 方法 5, autorelease 在当前上下文的 AutoreleasePool 栈顶的 autoreleasePool 实例添加此对象,由于它的引入使 Objective-C (非 GC 管理环境)由全手动内存管理上升到半自动化。 Objective-C 内存管理准则我们可以把上面的接口按对 retainCount 的操作性质归为两类, A类是加一操作: 1,2,3 B类是减一操作: 4,5 (延时释放) 内存管理准则如下: 1,A 与B类的调用次数保持一制 2 ,为了很好的保障准则一,以实例对象为单位,谁 A 了就谁B,没有第二者参与例: NSAutoreleasePool *pool =[[NSAutoreleasePool alloc] init]; NSObject *o=[[NSObject alloc] init]; //retainCount 为1 [oretain]; //retainCount 为2 [orelease]; //retainCount 为1 [oautorelease]; //retainCount 为1 [pool release]; //retaincount 为0,触发 dealloc 方法对象的拥有者面向对象领域里有个引用的概念, 区别于继承, 引用常被用来当做偶合性更小的设计。继承是强依赖, 对吧。我们要降偶软件的设计, 就要尽量减少对它的使用。但没有任何偶合的模块或功能是没有用的? 对吧,那我们只能多用引用了吧。一个实例拥有另一个实例的时候, 我们称它为引用了另一个实例。比如 ClassA 类的一个属性对象的 Setter 方法: -(void )setMyArray:(NSMutableArray *)newArray { if(myArray !=newArray) {[myArray release]; myArray =[newArray retain]; }} 假设这个类的一个实例为'
IOS开发 来自淘豆网m.daumloan.com转载请标明出处.