简述 OC 中内存管理机制。与 retain 配对使用的方法是 dealloc 还 是 release,为什么?需要与 alloc 配对使用的方法是 dealloc 还是 release,为什么......

原文:iOS面试题大全

OC 使用了一种叫做引用计数的机制来管理对象,如果对一个对象使
用了 alloc、[Mutable]copy,retain,那么你必须使用相应的 realease
或者 autorelease。也可以理解为自己生成的对象,自己持有。非自
己生成的对象,自己也能持有。不在需要自己持有的对象时释放。非
自 己 持 有 的 对 象 无 法 释 放 。 生 成 并 持 有 对 象
<alloc,new,copy,mutableCopy 等>,持有对象<retain>,释放对象
<release>,废弃对象<dealloc>。readwrite(默认):可读可写,表示既有
getter 方法,也有 setter 方法。readonly:表示只有 getter 方法,没有
setter 方法。nonatomic:不考虑线程安全。atomic(默认):线程操作
安全。strong(默认) :ARC 下和 MRC 下 retain 一样,weak(ARC 下):
和(MRC 下)assign 类似,区别是当 weak 指向的内存释放掉后自动置
为 nil,防止野指针。
unsafe_unretained 声明一个若引用,但不会自动置为 nil,可能会出
现野指针。
线程安全下的 setter 和 getter 方法:

-(NSString*)value{
@synchronized(self){
return[[_valueretain]autorelease];
}
}
-(void)setValue:(NSString*)aValue{
@synchronized(self){
[aValueretain];
[_valuerelease];
_value=aValue;
}
}

猜你喜欢

转载自blog.csdn.net/weixin_34318272/article/details/87130833