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的方法時,會由於找不到方法而出錯。