BOOLプロパティの使用


110

Appleはこの方法でBOOLプロパティを宣言することを推奨します:

@property (nonatomic, assign, getter=isWorking) BOOL working;

私はObjective-C 2.0のプロパティとドット表記を使用しているため、を使用してこのプロパティにアクセスしますself.working。私も使用できることは知っていますが、使用する[self isWorking]必要はありません。

では、どこでもドット表記を使用しているので、なぜ追加のプロパティを定義する必要があるのでしょうか。単に書いてもいいですか

@property (nonatomic, assign) BOOL working;

それともgetter=isWorking、私のケースで書く利点がありますか(ドット表記の使用)?

ありがとう!


4
これはセマンティックベースの推奨事項ではありませんか?したがって、myCar.isWorkingは、意味的にはmyCar.workingよりも正確です。ちょうど11
コンパイルしてください。

回答:


205

Appleは、単にisXスタイル上の目的でゲッターを宣言することをお勧めします。正しい名前のドット表記またはメッセージ表記を使用する限り、ゲッター名をカスタマイズするかどうかは関係ありません。ドット表記を使用する場合、違いはありませんが、プロパティ名でアクセスできます。

@property (nonatomic, assign) BOOL working;

[self setWorking:YES];         // Or self.working = YES;
BOOL working = [self working]; // Or = self.working;

または

@property (nonatomic, assign, getter=isWorking) BOOL working;

[self setWorking:YES];           // Or self.working = YES;, same as above
BOOL working = [self isWorking]; // Or = self.working;, also same as above

4
確かに、単なるスタイル上の目的よりも、キー値コーディングに準拠することのほうが重要ですか?
ジャサリエン

5
Apple がそれらのゲッターを宣言することを推奨するのは少し奇妙なことですisXが、Xcodeはそれらをオートコンプリートポップアップにリストできません。(私の例では)workingそこにリストされていますが、リストされてisWorkingいません。そのため、BOOLゲッターを宣言するメリットはありません。私はそれらを使用するためにもっと多くのことをしなければなりません(ゲッターを宣言します)が、私はより少なくなります(オートコンプリートなし)。
Patrick

4

Appleはスタイル上の目的で推奨しています。このコードを記述した場合:

@property (nonatomic,assign) BOOL working;

すると、[object isWorking]を使用できなくなります。
エラーが表示されます。しかし、以下のコードを使用すると

@property (assign,getter=isWorking) BOOL working;

したがって、[object isWorking]を使用できます。


-26

プリミティブ型でプロパティを使用するメリットはありません。 @property割り当てられたヒープで使用されるNSObjectsようにNSString*NSNumber*UIButton*メモリ管理アクセサを無料で作成しているため、およびなど。を作成するBOOLと、値は常にスタックに割り当てられ、メモリリークを防ぐための特別なアクセサは必要ありません。 isWorkingブール値の状態を表す一般的な方法です。

別のオブジェクト指向言語では、変数private bool working;と2つのアクセサーSetWorkingIsWorking作成します。セッター用とアクセサー用です。


1
あなたは彼の質問に答えていません。つまり、ゲッターにプロパティ以外の何かを明示的に指定する目的は何ですか?また、プロパティはKVOとKVCを許可するので、あなたがする点は誤解を招くものです。
Martin Gjaldbaek、2011

プリミティブプロパティでのKVOとKVCの使用を見落としていたのはあなたの言うとおりです。スレッドの全員がisWorkingに関する彼の質問に取り組んでいると思います-これは命名規則です。
Thomson Comer

25
これは完全に間違っています。 @propertyプリミティブ型で使用することを非常に意図しており、一貫性のためだけに、重要な利点があります。さらに、一部のプリミティブ型(一部の32ビットCPUでは64ビット型、多くの32ビットおよび64ビットCPUでは128ビット型)は、割り当て時に非アトミックです。 @propertyの原子性は、これらの場合にも有利です。
bbum

1
興味深いですが、一体どうやってそれを知っているのでしょうか。:)これはatomicおよびnonatomic属性の暗黙的ですか?
Thomson Comer
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.