ios - Warum heißt es in einigen Büchern, dass die Initialisierungsmethode und die Dealloc-Methode Daten immer über Instanzvariablen lesen und schreiben sollten?
我想大声告诉你
我想大声告诉你 2017-05-17 10:05:31
0
1
1028

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?

我想大声告诉你
我想大声告诉你

Antworte allen(1)
黄舟

书中不是讲的很清楚吗:

  • _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

没有明白你哪里不清楚,只能用我的思路简单描述一下。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage