1 内存管理
alloc new (mutable)copy 这三者会使计数器+1
retain 返回其调用的对象本身
示例:
Person * p = [[Person alloc] init]; // retainCount 为1 ,p是在栈内存中,其内保存着指向堆内存中开创出来的Person对象地址的值。
[p retain]; // 返回p本身,即可以写成 p = [p retain] 此时retainCount 为2
[p release]; // 计数器减1 retainCount 为1
[p release]; // 计数器再减1 retainCount 为0 ,将自动调用person对象的 dealloc方法,释放内存。注意,此时,p 中仍然保存着person对象的地址值,但此时,联系已经断开了,堆内存中的person对象已经消除了,称为僵尸对象!p此时也称为野指针!
p.age = 5; // 注意,此处等于调用僵尸对象赋值,可能会不报错。在Xcode中开启内存管理开关(僵尸对象检查机制),就会报错。打开方法:Edit schema --> Diagnostics -->Objective-c Enable Zombie Objects 上打钩
[p release]; // 此时会报错。野指针指向的僵尸对象没法release;
p = nil; // 将 p 这个野指针清空,此时称为 空指针
[p release]; // 此处无错,空指针指向空对象可以release
原文:http://www.cnblogs.com/appzhang/p/3588169.html