Effiective objecttive -c2.0 這本書說 在初始化方法和dealloc方法總是應該透過實例變數來讀取數據,看了半天沒看懂原因到底是為什麼?有看這本書的嗎?
黄舟2017-05-17 10:07:31
書中不是講的很清楚嗎:
_name = @"Jack"
不經過setter的訊息發送,直接為變數賦值,速度快。
對於以下的 name
屬性:
@property (nonatomic, copy) NSString *name;
直接賦值是: _name = @"Jack";
,通过 self.name = @"Jack"
其实等同于 _name = @"Jack".copy
;
self.name = @"Jack"
会触发KVO,_name = @"Jack"
會觸發KVO,
self.name = @"Jack"
NSString *str = _name
,赋值用 self.name = @"Jack"
所以有合理折中方案就是,讀取資料的時候用 NSString *str = _name
,賦值用
self.name = @"Jack"
可能不等同于 _name = @"Jack".copy
另外要注意的是子類別可能會複寫setter方法,用
_name = @"Jack".copy
。 沒有明白你哪裡不清楚,只能用我的思路簡單描述一下。 🎜