iOS中copy 学习笔记

copy表达的属性与strong类似。但是设置方法并不保留新值,而是将其copy,当属性为NSString时,经常用此特质来保护其封装性,因为传递给设置方法的新值可能指向NSMutableString类的实例。但是NSMutableString是可以更改的,如果不设置copy,那么NSString的值就会在不知情的情况下被更改。

另外block中有时也会使用copy,因为在MRC时代,方法内部的block是在栈区的,使用copy可以把它放到堆区。这时如果不使用copy,那么就无法使用block的作用域。但是在ARC中,编译器自动帮你实现这个copy,因此用copy和strong都一样。

最后@property(copy,nonatomic)NSMutableArray *array是会出错的,因为copy会复制一个不可变的array,当你使用可变array的方法时,会由于找不到方法而出错。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章