誰かが興味を持っている場合:1-4はすべて同じことをします。具体的には、ゲッターとセッターを使用します。5は直接アクセスです-ゲッター/セッターを使用しません。
私の推奨事項は、ドット表記がメッセージングであり、メッセージングはほとんどの場合、オブジェクトとの対話方法であるということを受け入れることです。したがって、ドット表記を使用してください。
セレクターのマッチングは、ドット表記を使用するとより強力になります。
// ARC
NSURL * url = nil;
NSObject<NSFilePresenter>* presenter = nil;
url = [presenter presentedItemURL]; // << match
url = presenter.presentedItemURL; // << property matched to presenter's method
NSObject * object = nil;
url = object.presentedItemURL; // << ERROR object/selector mismatch
url = [object presentedItemURL]; // << ERROR object/selector mismatch
id untyped = nil;
url = untyped.presentedItemURL; // << ERROR object/selector mismatch (Good compiler)
url = [untyped presentedItemURL]; // << OOPS, vague selector matched
したがって、ドット表記を使用して導入する型安全性の向上により、メンテナンスと将来のエラーを節約できます。
構造体(またはC ++クラス)を扱っていると思わない限り、メンバーアクセスと混同する可能性は低く、直接ivarアクセスを警告するコンパイラチェックが多数あります。
直接アクセス(_myLabel.propおよびself->_myLabel.prop)は避ける必要があります(いくつかのエッジケースを除く)。このルールの例外は、部分的に初期化された状態です。初期化子と-deallocでは、直接アクセスを使用する必要があり、アクセサーメソッドは使用しないでください。
もちろん、それがうまく読める他の場所があります:
return array.count; <<< OK - clear, although not strictly a @property
...そしてあなたはそれをやりすぎることができます:
NSString * string = NSString.alloc.init; <<< GROSS! you will not make friends using this