Objective C - 属性对比

MRC:

retain:适用继承于NSObject类的对象类型。释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的引用计数为1。

assign:适用基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char, 等等)。简单赋值,不更改对象的引用计数。

ARC:

strong(强引用):等同于retain,但在block声明时和retainyou 区别。

weak(弱引用):适用代理的声明。

copy(深拷贝、浅拷贝):适用NSString类型和block类型。

atomic和nonatomic:

atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。

retain和strong的区别:

在声明block时,strong相当于copy,retain相当于assign。

assign和strong的区别:

在声明block时,strong相当于copy,retain相当于assign。

assign和weak的区别:

在ARC中,在有可能出现循环引用的时候,往往要通过让其中一端使用weak来解决;自身已经对它进行一次强引用,没有必要再强引用一次,此时也会使用weak。

assign 可以用非OC对象,而weak必须用于OC对象。

weak 此特质表明该属性定义了一种“非拥有关系” (nonowning relationship)。为这种属性设置新值时,设置方法既不保留新值,也不释放旧值。此特质同assign类似,然而在属性所指的对象遭到摧毁时,属性值也会清空(nil out)。

而 assign 的“设置方法”只会执行针对“纯量类型”(scalar type,例如 CGFloat 或 NSlnteger 等)的简单赋值操作。

strong强引用和weak弱引用的区别:

(weak和strong)不同的是 当一个对象不再有strong类型的指针指向它的时候 它会被释放  ,即使还有weak型指针指向它。

一旦最后一个strong型指针离去 ,这个对象将被释放,所有剩余的weak型指针都将被清除。

深拷贝和浅拷贝:

用@property声明 NSString、NSArray、NSDictionary 经常使用copy关键字,是因为他们有对应的可变类型:NSMutableString、NSMutableArray、NSMutableDictionary,他们之间可能进行赋值操作,为确保对象中的字符串值不会无意间变动,应该在设置新属性值时拷贝一份。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS开发中, 之前一直使用swift, 因此对于Objective-C的内存管理机制长期处于混乱的一知半解状态....
    icetime17阅读 888评论 1 8
  • 307、setValue:forKey和setObject:forKey的区别是什么? 答:1, setObjec...
    AlanGe阅读 1,611评论 0 1
  • 禅与 Objective-C 编程艺术 (Zen and the Art of the Objective-C C...
    GrayLand阅读 1,683评论 1 10
  • 初夏 云朵一般的白色芦苇拉着风的衣襟呼唤没有音乐的午后酌一杯香茗的时间与文字厮守 蝴蝶扑扇的声音 彰显着宁静与安恬...
    初雪日记阅读 110评论 0 0
  • 一和四说好朋友难找,好朋友像繁星 友情是什么,不是什么,朋友可以看出眼神里的那个……
    笑颜于粤阅读 342评论 0 1