Effiective objecttive -c2.0 這本書說 在初始化方法和dealloc方法總是應該透過實例變數來讀取數據,看了半天沒看懂原因到底是為什麼?有看這本書的嗎?
書中不是講的很清楚嗎:
_name = @"Jack" 不經過setter的訊息發送,直接為變數賦值,速度快。
_name = @"Jack"
對於以下的 name 屬性:
name
@property (nonatomic, copy) NSString *name;
直接賦值是: _name = @"Jack"; ,通过 self.name = @"Jack" 其实等同于 _name = @"Jack".copy;
_name = @"Jack";
self.name = @"Jack"
_name = @"Jack".copy
self.name = @"Jack" 会触发KVO,_name = @"Jack" 會觸發KVO,
NSString *str = _name,赋值用 self.name = @"Jack"所以有合理折中方案就是,讀取資料的時候用 NSString *str = _name,賦值用
NSString *str = _name
self.name = @"Jack"可能不等同于 _name = @"Jack".copy另外要注意的是子類別可能會複寫setter方法,用
書中不是講的很清楚嗎:
_name = @"Jack"
不經過setter的訊息發送,直接為變數賦值,速度快。對於以下的
name
屬性:直接賦值是:
_name = @"Jack";
,通过self.name = @"Jack"
其实等同于_name = @"Jack".copy
;
不會self.name = @"Jack"
会触发KVO,_name = @"Jack"
會觸發KVO,
可以在 setter 方法中進行斷點調試,每次賦值你都知道。self.name = @"Jack"
NSString *str = _name
,赋值用self.name = @"Jack"
所以有合理折中方案就是,讀取資料的時候用NSString *str = _name
,賦值用self.name = @"Jack"
可能不等同于_name = @"Jack".copy
另外要注意的是子類別可能會複寫setter方法,用_name = @"Jack".copy
。