0

次のコードがあるとします。

[somevalue_field 
  addTarget:self 
  action:@selector(somevalue_fieldDidChange:)
  forControlEvents:UIControlEventEditingDidEnd | UIControlEventTouchDragExit |
                   UIControlEVentTouchDragOutside ];

これらの UIControlEvents のビットごとの OR は、これらのイベントのいずれかが発生した場合にセレクターのメソッドが起動するように、それらの効果を組み合わせるという点で実際に連携しますか?

それとも、あまりにも多くのビットが一緒になって 1 つの整数に収まらないのでしょうか?

4

1 に答える 1

5

はい、制御イベント フラグを一緒に OR できます。

ビットごとの OR がどのように機能するかについて少し混乱していると思います。ORing はビット数を増やすのではなく、設定するビット数を増やすだけです。

次のように定義されたフラグが表示された場合:

UIControlEventTouchDragOutside    = 1 <<  3,
UIControlEventTouchDragExit       = 1 <<  5,
UIControlEventEditingDidEnd       = 1 << 18,

多くの場合、それらを一緒に論理和できることが意図されていたという手がかりです。

バイナリでは、これらのフラグと OR の結果は次のようになります。

UIControlEventTouchDragOutside 0000000000000000000000000001000
UIControlEventTouchDragExit 0000000000000000000000000100000
UIControlEventEditingDidEnd 00000000000001000000000000000000

ORの結果 00000000000001000000000000101000

ご覧のとおり、結果のビット数は同じ (32) のままです。変化するのは、設定されたビットの数だけです。

詳細については、Google の「バイナリ演算」および「ビット単位のブール演算子」を参照してください。

最後のメモ、Apple docs foraddTarget:action:forControlEvents say:

controlEvents アクション メッセージが送信されるコントロール イベントを指定するビットマスク。ビットマスク定数については、「コントロール イベント」を参照してください。

ビットマスクという用語は、この呼び出しのコントロール イベント定数を論理和できることを意味します。

于 2012-07-25T18:04:14.077 に答える