Heim > Fragen und Antworten > Hauptteil
Effective objective -c2.0 In diesem Buch heißt es, dass Sie in der Initialisierungsmethode und der Dealloc-Methode Daten immer über Instanzvariablen lesen und schreiben sollten. Nachdem ich es lange gelesen habe, habe ich den Grund nicht verstanden. Hat jemand dieses Buch gelesen?
黄舟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"
不会
self.name = @"Jack"
可以在 setter 方法中进行断点调试,每次赋值你都知道。
所以有一种合理折中方案就是,读取数据的时候用 NSString *str = _name
,赋值用 self.name = @"Jack"
。
另外需要注意的是子类可能复写setter方法,用 self.name = @"Jack"
可能不等同于 _name = @"Jack".copy
。
没有明白你哪里不清楚,只能用我的思路简单描述一下。