3

重複の可能性:
iOS ブール値の状態にはどのような値を使用すればよいですか?

iOS環境には5つのブール型のようなものがあると思います(C、C++、およびObjective Cに由来します)。

  • _ブール
  • ブール
  • ブール
  • boolean_t
  • ブール値

そして、それらには少なくとも 4 つの値のペアがあります。

  • 真/偽
  • 真/偽
  • はい・いいえ
  • 1、0

iOS Objective C 開発に使用するのに (スタイル的に) 最適なのはどれだと思いますか?

更新 1

タイプ「ブール」について言及しました。存在しないようです。リストから削除し、_Bool を追加しました。

これらの型と値の typedef を認識しています。スタイルの違いについて質問です。

4

6 に答える 6

5

iOS と OS X はほとんどが Cocoa でできておりBOOL、値がYES/のブール型を使用しますNO

bool
  • C++ によって定義されます。
  • 0 または 1 であることが保証されている真のブール値。
_Bool
  • C99 で定義されています。
  • 0 または 1 であることが保証されている真のブール値。
  • stdbool.h が含まれている場合、bool は _Bool として #define されます。
BOOL
  • の Objective-C ランタイムによって定義されます/usr/include/objc/objc.h
  • signed char32 ビットの A。値はYES(0x01)、NO(0x00)、または -127 から 128 の範囲内の任意の値です。 YES/NOは で定義されてい<Foundation/NSObjCRuntime.h>ます。
  • 64 ビットの Aboolで、0 または 1 であることが保証されています。
Boolean
  • CFBase.hの Carbon によって定義されています。
  • 符号なしの char。
  • 値はTRUE(0x01)、FALSE(0x00)、または -127 から 128 の範囲の任意の値です。
boolean_t
  • によって定義されます/usr/include/mach/i386/boolean.h
  • x32 の int または x64 の unsigned int。

true でないブール型の場合:

  • ゼロ以外の値は、論理式では true として扱われます。
  • キャストされた型よりも範囲が狭いブール型にキャストすると、下位バイトのみが使用されます。

どちらかのタイプが違いを生むケースは想像しにくいです。BOOL へのキャストがうまくいかない場合や、いくつかのまれな状況があります (例: KVO は BOOL を NSNumber に変換し、bool を CFBoolean に変換します)。どちらかといえば、一貫して BOOL を使用すると、Apple がその定義を変更した場合に備えてカバーされます。

于 2013-01-22T18:02:49.790 に答える
3

BOOLおよびYES/NOをObjective-Cコードで使用します。これは、Objective-Cコードと、Objective-Cヘッダーがデータ型を定義する方法で予想されます。(ポインタの「真実性」をチェックするときや、C ++コードなどを処理するときなど、他の型/値を処理する場合があることに注意してください。ただし、Objective-Cは通常、ブールデータ型および値にBOOLおよびYES/を使用します。)NO

于 2013-01-22T17:40:13.903 に答える
2

基本的に無関心です。typedef signed char BOOL;実際には、typedef signed char Boolean;、 など、まったく同じ方法で宣言されているに違いありません。

したがって、それらは実質的に互換性があり、同等です。ただし、最善のアプローチは、型メソッドのexpectとreturnを尊重することです。そのため、次のように記述します

[object someObjectiveCMethod:YES];

それ以外の

[object someObjectiveCMethod:TRUE];

CFWhateverSetBooleanProperty(true);

それ以外の

CFWhateverSetBooleanProperty(YES);
于 2013-01-22T17:40:47.793 に答える
2

ObjC コードには ObjC の BOOL を使用します。「ネイティブ」である他のものを使用します。それ以外のものは、コードを読むときに「異常」であり、特別な注意を払う価値があるものとして目立つ傾向があります。これは、実際に異常で特別な注意が必要なコードのために予約する必要があるプロパティです。

于 2013-01-22T17:42:47.087 に答える
0

YES と NO を含む BOOL。

ただし、BOOL は signed char であるため、YES は 1 に等しく、NO は 0 に等しくなります。


ではobjc.h、次のように定義されています。

typedef signed char BOOL; 

#define YES ((BOOL)1)
#define NO  ((BOOL)0)
于 2013-01-22T17:38:40.970 に答える
0

コードを読む人がこのタイプを知らない可能性があるという事実がなければ、それぞれを使用できます。したがって、慣例として、(1)またはBOOLの値を持つ可能性のある which を使用します。YESNO

于 2013-01-22T17:41:09.690 に答える