首页 > 移动平台 > 详细

iOS之“ARC局限性”

时间:2015-11-20 01:35:58      阅读:377      评论:0      收藏:0      [点我收藏+]

       一、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。

}

iOS之“ARC局限性”

原文:http://www.cnblogs.com/Jackyxiang/p/4979508.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!