2

インターネットを検索すると、プロパティに最適な方法でアクセスする方法について大きな議論があるようです。ドット表記を好む人もいれば、ドットの使用にまったくうんざりしている人もいます。Objective-Cとココアの初心者として、あなたの経験で「ベストプラクティス」と見なすべきものを誰かに教えてもらえれば幸いです。

@interface MyViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *myLabel;
@end

UILabelのプロパティである「hidden」などにアクセスするためのベストプラクティスと見なす必要があるのは、次のうちどれですか。

1

self.myLabel.hidden = YES;

2

[self.myLabel setHidden:YES];

3

[[self myLabel] setHidden:YES];

4

[self myLabel].hidden = YES;

5

上記のすべてですが、自動合成されています_myLabel

これが非常に主観的な質問である場合は申し訳ありませんが、本当にあなたの意見を聞きたいです!

要約する:

すべてが「ベストプラクティス」です。あなたがコードの最も美しい行であると思うものを選んで、それに固執してください。

4

4 に答える 4

3

誰かが興味を持っている場合: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
于 2013-03-05T12:23:56.677 に答える
0

[self.myLabel setHidden:YES];何かに値を設定していることをコードで明確にするために、この表記を使用することを好みます。

パフォーマンスの点では、実際には大きな違いはありません。それはあなた次第です

于 2013-03-05T12:14:04.093 に答える
0

私が見たのは、プロパティにドット表記を使用しているので、

self.myLabel.hidden = YES;
于 2013-03-05T12:14:45.820 に答える
0

すべてが良い習慣です。

ただし、ベスト プラクティスは選択によって異なります。

リストにもう1つ言及するのを忘れていましたが。

_myLabel.hidden = はい;

于 2013-03-05T12:17:27.930 に答える