引用计数器的操作:
1.给对象发送一条retain消息,可以使引用计数器值+1(retain方法返回对象本身)
2.给对象发送一条release消息,可以使引用计数器值-1
3.可以给你对象发送retainCount消息获得当前的引用计数器值
对象的销毁
1.当一个对象的引用计数器的值为0时,那么它将被销毁,其占用的内存被系统回收
2.当一个对象被销毁时,系统会自动向对象发送一条dealloc消息
3.一般会重写dealloc方法,在这里释放相关资源,dealloc就像对象的遗言
4.一旦重写dealloc方法,就必须调用[super dealloc],并且放在最后门调用
5.不要直接调用dealloc方法
6.一旦对象被回收了,它占用的内存就不再可用,坚持使用会导致程序崩溃(野指针错误:野指针是指向僵尸对象(不可用内存)的指针)
#import<Foundation/Foundation.h>
@interface Person :NSObject
@end
@implementation Person
-(id)dealloc
{
[super dealloc];//这句一定要放到最后面
}
@end
int main()
{
Person *p = [[Person alloc] init];
NSUInteger c = [p retainCount];//返回当前计数器的值
NSLog(@"计数器:%ld,c");
//2 retain方法返回的是对象本身,即哪哥对象调用它,就返回哪个对象
[p retain];//使计数器+1,并返回p
[p release]// 计数器-1
[p release] //此时,计数器变为0了,对象被回收 且 系统即将调用dealloc方法
//空指针
p = nil //对象被回收后,原来的指针就成野指针,把野指针清空,可以使P和原对象内存没有指向关系
return 0 ;
} |
|