天天看點

ios拷貝小議

1.copy vs mutableCopy

copy,對于不可變的對象,簡單的指向其記憶體.對于可變對象,複制記憶體内容到新的記憶體中并把新的記憶體值指派給左值.

mutableCopy,始終複制到新的記憶體中,以一個可變的類型指派給左值.

ios拷貝小議

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等