——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
**
引用计数器
**
4字节
每一个对象都有一个引用计数器
1.当一个对象的引用计数器为0时,对象占用的内存就会被系统回收
2.对计数器的操作
给对象发送一条retain消息,可以使引用计数器+1
发送release消息,计数器-1
发送retainCount消息,获得当前计数器值
对象的销毁
1.当对象被销毁时,系统会自动发一条dealloc消息给对象。
2.一般会重写dealloc对象,释放相关资源
- (void)dealloc
{
//……….释放对象占有的资源
[super dealloc];
}
野指针
1.指向不可用的对象
经典错误:Thread 1: EXC_BAD_ACCESS
2.OC中没有空指针错误
[nil release] 不报错
3.内存操作规范
如果想使用某对象,就应该让他的引用计数器加1
如果不想使用了,就应该调用release 计数器-1
谁retain 谁release
谁alloc 谁release
dealloc
dealloc是在被调用release之后,主要为了释放本对象而做的事。对占用的对象发送release消息,非对象成员会被系统自动回收。
autorelease 必须关闭ARC
OC提供@autorelease{
………..
}
只要把代码放在里面,再在对象创建时就调用autorelease方法,autorelease块之后就会自动调用release方法。
autorelease可以多重叠加,autorelease也是一个类。
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc ] init];
Person * p = [[[Person alloc] init] autorelease];
[pool drain];
@autoreleasepool {
Person * p = [[[Person alloc] init] autorelease];
}
ARC
开了ARC,怎么写都是对的,详情必须看接口@property所带的参数了,如果是stong 属性指向的对象,和retain一样.
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-