84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
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" 不会
self.name = @"Jack" 可以在 setter 方法中进行断点调试,每次赋值你都知道。
所以有一种合理折中方案就是,读取数据的时候用 NSString *str = _name,赋值用 self.name = @"Jack"。
NSString *str = _name
另外需要注意的是子类可能复写setter方法,用 self.name = @"Jack"可能不等同于 _name = @"Jack".copy。
没有明白你哪里不清楚,只能用我的思路简单描述一下。
书中不是讲的很清楚吗:
_name = @"Jack"
不经过setter的消息发送,直接为变量赋值,速度快。对于以下的
name
属性:直接赋值是:
_name = @"Jack";
,通过self.name = @"Jack"
其实等同于_name = @"Jack".copy
;self.name = @"Jack"
会触发KVO,_name = @"Jack"
不会self.name = @"Jack"
可以在 setter 方法中进行断点调试,每次赋值你都知道。所以有一种合理折中方案就是,读取数据的时候用
NSString *str = _name
,赋值用self.name = @"Jack"
。另外需要注意的是子类可能复写setter方法,用
self.name = @"Jack"
可能不等同于_name = @"Jack".copy
。没有明白你哪里不清楚,只能用我的思路简单描述一下。