【自动内存管理(ARC)】

【自动内存管理(ARC)】
//从Xcode5以后,默认自动内存管理
automatic reference counting;
//自动引用计数
【提】简单点说就是让编译器完成堆空间的引用计数加减,自动释放。程序员不再写 retain release等方法
【另】OC的自动内存管理,不同于JAVA垃圾回收。而是在预处理时,直接在应该保留的地方,添加retain,在应该释放的地方,添加release。是直接添加代码。

【另】从效率上,ARC优于手动内存管理。

一.ARC的局限
1.使用ARC,可能因为代码的不规范,导致内存提前释放。
//尤其使用AVAudioplayer类的时候,很可能造成提前释放。
2.导入一些第三方库,或者导入旧代码,这些代码不支持ARC。

二.解决ARC的局限
1.将不使用ARC的代码转成ARC代码
    Edit —> Refactor —> Convert to ARC
2.ARC非ARC混编
    //同一个工程中,部分文件使用ARC,部分文件不使用ARC。
Build phase -----> Complie Source
-fno-objc-arc

//-fobjc-arc

三.使用ARC的技巧
1.四个关键字 修饰引用
    __strong(强引用) 缺省属性,其修饰的对象指针,指向哪个对象,会对该对象retain,离开哪个对象,会对该对象release。

    __weak(弱引用)其修饰的对象指针,指向任何对象都不会retain。这样的指针指向的对象随时可能消失。如果对象消失了,这个指针会自动变成nil。
//在iOS编程中,代理对象使用弱引用。

    __unsafe_unretained 其修饰的对象指针,指向任何对象都不retain。当指向的对象消失,该指针不会变成nil,仍然指向已经释放的对象

    __autoreleasing 只用来修饰需要被传入地址的指针。如:
__autoreleasing NSError * error;   &error;

2.属性的()修饰符,原则上,不能写retain 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
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值