一、ARC的局限
1、使用ARC的局限,可能导致代码的不规范,导致内存的泄露。(尤其是AVAudioplayer类)
2、导入第三方库,或者导入旧代码,这些代码不支持ARC。
二、解决ARC的局限
1、将不使用ARC代码转成ARC代码
Edit——》Refactor----》Convert to ARC
2、ARC非ARC混编
同一个工程中,部分文件不使用ARC,部分文件使用ARC。
Build phase----》Conpile Source
-fno-objc-arc
三、使用ARC技巧
1、四个关键字 修饰引用
_strong(强引用)缺省属性,其修饰的对象指针,指向哪个对象,会对哪个对象retain,离开那个对象,会对该对象release。
_weak(弱引用)其修饰对象指针,指向任何对象都不会retain,这样的指针指向哪个对象,随时可能消失。如果对象消失,指针将变为nil;
_unsafe_unretained 其修饰的对象指针,指向任何对象都不retain。当指向的对象消失,该指针不会变成nil,仍然对象使用弱引用。
__autoreleasing 只修饰需要被传入地址的指针。如__autoreleasing NSError *error =nil;
&error。
2、属性的修饰符,原则上,不能写retian copy了 只能写Strong,如果不想retain,写Weak
【注】但实际上ARC对这方面很宽松,谢了retain也没有关系。
实际工作中,不是字符串,写strong,代理对象写weak,字符串写copy
3、id指向对象,不能用void*p指向对象
int a
void *p =&a;
id p = [[NSObject alloc]init];
4、C结构体,不能声明对象指针,否则这个指针不会进行内存管理
struct sct{
id obj;
}
5、不能(显示)手动调用父类的dealloc
- (void)dealloc
{
self.name = nil;
自动调用父类的dealloc。
}
原文:http://www.cnblogs.com/Jackyxiang/p/4979508.html