使用對象時經(jīng)常需要拷貝它挠说,如果想令自己的的類支持拷貝操作,那么就要實現(xiàn)NSCopying協(xié)議遮婶,該協(xié)議只有一個方法:
-(id)copyWithZone:(NSZone*)zone
為何會出現(xiàn)NSZone呢,以前開發(fā)程序時,會據(jù)此把內(nèi)存分為不同的區(qū)蟀俊,而對象會創(chuàng)建在某個區(qū)里面。現(xiàn)在不用了订雾,每個程序只有一個區(qū):默認區(qū)(default zone)肢预。所以說,盡管必須實現(xiàn)這個方法洼哎,但不必擔(dān)心zone參數(shù)烫映。
當對象調(diào)用copy方法時候,其實是調(diào)用這個協(xié)議方法噩峦!重寫NSCopying方法里面可以做一些其他操作锭沟。另外拷貝的話不管屬性還是實例變量都有以拷貝過來,不能共用识补。通常在該方法里族淮,我們會調(diào)用下全能初始化方法來生產(chǎn)一個新對象,但有時候如果初始化方法可能要設(shè)置一個復(fù)雜的內(nèi)部數(shù)據(jù)結(jié)構(gòu)凭涂,可是在拷貝后的對象中祝辣,這個數(shù)據(jù)結(jié)構(gòu)立刻要用其他數(shù)據(jù)來復(fù)寫,所以沒必要在設(shè)置一遍切油。
對應(yīng)的copy的協(xié)議還有一個NSMutableCopying協(xié)議蝙斜。用于返回可變的對象。如果在可變對象上調(diào)用copy協(xié)議方法澎胡,返回的就是不可變對象孕荠。
NSCopying和NSMutableCopying協(xié)議可以同時實現(xiàn)
如果你所寫的對象需要深拷貝,那么可考慮新增一個專門執(zhí)行深拷貝的方法