iOS中assign,copy,retain之间的区别以及wea
2017-04-11 本文已影响25人
顺扬sky
介绍及区别
- copy:用于希望保持一份传入值得拷贝,俄入世值自身的情况,既把原来的对象完整的赋值到另外一个地方,从新加载一内存区,味蕾一个地址的值改变了不影响另一个地址的值。
- assign:简单的直接赋值,相当于说两个对象指向同一个内存区,当内存区的值发生了改变,既所有指向这个内存区的对象发生了改变。
- retain:释放旧对象,即将旧对象的值赋予输出对象,再提高杜如丁香的引用计数+1
上面的意思是
Copy其实是建立了一个相同的对象,而retain不是
例如一个NSSting对象,地址为0x1111,内容为@“123”
copy到另一个NSString之后,地址为0x2222,地址内容相同,当新的对象发生改变时,原来的对象没有发生改变(retain值没有发生改变)
retain到另一个NSString之后,地址相同(建立一个指针,指针拷贝),内容相同,之歌对象的retain值+1
assign 地址是0x1111,内容也是‘ABC’
@property内存管理策略的选择
非ARC
- Copy:只用于NSString\block
- retain: 除NSString\block以外的OC对象
- assign:基本数据类型、枚举、结构体(非OC对象),当2个对象想回引用时,一端用retain,一端用assign.
ARC
- copy:只用于NSString\block
- strong:除NSString\block以外的OC对象
- weak:当两个对象相互引用,一端用strong,一端用weak
- assign:基本数据类型、枚举、结构体(非OC对象)
(此片文章参考了其他文章,是作者自己练习的文章)