1.copy vs mutableCopy
copy,對于不可變的對象,簡單的指向其記憶體.對于可變對象,複制記憶體内容到新的記憶體中并把新的記憶體值指派給左值.
mutableCopy,始終複制到新的記憶體中,以一個可變的類型指派給左值.
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuIGZ1UjZwEjYwYjNmNDOmdjY3MWN5EzYyETNjFjMwcDOfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
2.copy vc retain
retain,引用計數+1,記憶體位址指派給左值.
copy,對于不可變對象的,相當于retain;對于可變對象,則是深拷貝指派.
舉例:
3.一些問題
通過上面2點,思考下面的問題
我們通常如果這樣定義一個變量
然後這樣使用
能通過麼?當然不能,指派後的mString是NSString類型的,不可變.如果需要可以改變就需要自己定義屬性函數.
(當然,NSMutableString不是線程安全的,一般都建議私有之:@private;或者一定要用的話以NSString作為對外接口類型)
4.NSCopying NSMutableCopying NSCopyObjective()
NSCopying就是複制一個對象
NSMutableCopying就是深拷貝一個對象,讓兩個對象的改變互不影響
(其實上面着兩個完全看你怎麼寫啦)
NSCopyObject(self,0,zone)就是簡單的指派=
(在涉及到ns對象的時候,NSCopyObject不建議使用)
注意看下面一個例子:
參考:http://stackoverflow.com/questions/2002174/copy-mutablecopy
http://stackoverflow.com/questions/4995254/nsmutablestring-as-retain-copy
http://robnapier.net/blog/implementing-nscopying-439#comment-1312
注釋:可變對象mutable比如NSMutableString,NSMutableArray等
不可變對象immutable比如NSString,NSArray等