suchen

Heim  >  Fragen und Antworten  >  Hauptteil

ios - Warum heißt es in einigen Büchern, dass die Initialisierungsmethode und die Dealloc-Methode Daten immer über Instanzvariablen lesen und schreiben sollten?

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?

我想大声告诉你我想大声告诉你2805 Tage vor1056

Antworte allen(1)Ich werde antworten

  • 黄舟

    黄舟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

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

    Antwort
    0
  • StornierenAntwort