1 對象copy概念
copy的字面意思就是複制 拷貝 是一個産生副本的過程 對象拷貝的目的:要使用某個對象的資料, 但是在修改對象的時候不影響原來對象的内容 特點: 修改源檔案的内容,不會影響副本檔案 修改副本檔案的内容,不會影響源檔案 OC中的copy 就是指的對象的拷貝 如何使用copy的功能: 一個對象可以調用copy或mutableCopy方法來建立一個副本對象 copy : 建立的是不可變副本 (NSString, NSArray, NSDictionary) mutableCopy:建立的是可變副本,(NSMutableString, NSMutableArray, NSMutableDictionary)
使用copy功能的前提: copy: 需要遵守NSCopying協定,實作copyWithZone:方法 mutableCopy: 需要遵守NSMutableCopying協定,實作mutableCopyWithZone:方法
2 初識copy
以NSString字元串為例,進行copy 和 mutableCopy示範 copy就是淺複制,沒有産生新的對象 隻是拷貝位址
mutableCopy就是深複制,會在記憶體中重新配置設定一塊記憶體空間
隻要是涉及到可變對象就是深複制
3 copy與記憶體管理 NSString的copy 淺複制,源對象的引用計數器+1
NSString的mutableCopy 深複制,建立了一個新對象,新對象的引用的引用計數器是1
總結: 深複制 (深拷貝 内容拷貝 deep copy) 源對象和副本對象是不同的兩個内容 源對象引用計數器不變,副本對象計數器為1 本質是: 産生了新的對象 淺複制 (淺拷貝 指針拷貝 shallow copy) 源對象和副本對象是同一個對象 源對象(副本對象)引用計數器+1 相當于做一次retain操作 本質 :沒有産生新的對象
3 @property中copy的作用
以上肯定不是我們想要的,因為str修改後,會影響person.name的值 解決辦法: @property(nonatomic, copy) NSString *name;