OC中assign,copy,retain之间的区别 及weak和strong的区别

• copy: 用于希望保持一份传入值的拷贝,而不是值自身的情况,即把原来的对象完整的赋值到另外一地方,重新加载一内存区,一个地方变了不影响另一个地方的对象。

• assign:  简单的直接赋值,相当于说两个对象指向同个内存区,一个地方的变了,其他的也跟着改变。

• retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数 为1

那上面的是什么意思呢?

Copy 其实是建立了一个相同的对象,而 retain 不是:

比如一个 NSString 对象,地址为 0×1111,内容为@”ABC”

Copy 到另外一个 NSString 之 后,地址为 0×2222,内容相同,新的对象 retain 为 1, 旧 有对象没有变化

retain 到另外一个 NSString 之 后,地址相同(建立一个指针,指针拷贝),内容当然相 同,这个对象的 retain 值+1

assign 地址还是0x1111,内容也还是“ABC”。

也就是说,retain 是指针拷贝,copy 是内容拷贝。

strong,weak 用来修饰属性。

strong 用来修饰强引用的属性;

@property(strong) SomeClass * aObject;

对应原来的

@property(retain) SomeClass * aObject; 和@property(copy) SomeClass * aObject;

weak 用来修饰弱引用的属性;

@property (weak) SomeClass * aObject;

对应原来的

@property (assign) SomeClass * aObject;

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

推荐阅读更多精彩内容