効果的な目標 -c2.0 この本には、初期化メソッドと dealloc メソッドは常にインスタンス変数を介してデータを読み書きする必要があると書かれていますが、長い間読んだ後、理由がわかりませんでした。誰かこの本を読んだことがありますか?
この本にはとても明確ではありませんか:
_name = @"Jack" セッターを介してメッセージを送信せずに、変数に値を直接代入する方が高速です。
_name = @"Jack"
次の name 属性の場合:
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もう 1 つ注意すべき点は、サブクラスはセッター メソッドをオーバーライドする可能性があり、
この本にはとても明確ではありませんか:
_name = @"Jack"
セッターを介してメッセージを送信せずに、変数に値を直接代入する方が高速です。次の
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
もう 1 つ注意すべき点は、サブクラスはセッター メソッドをオーバーライドする可能性があり、_name = @"Jack".copy
と同等ではない可能性があることです。