美文网首页iOS随笔
iOS中assign,copy,retain之间的区别以及wea

iOS中assign,copy,retain之间的区别以及wea

作者: 顺扬sky | 来源:发表于2017-04-11 18:58 被阅读25次

介绍及区别

  • 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对象)

(此片文章参考了其他文章,是作者自己练习的文章)

相关文章

网友评论

    本文标题:iOS中assign,copy,retain之间的区别以及wea

    本文链接:https://www.haomeiwen.com/subject/trvuattx.html