iOS中的UIControlEvents可以一起进行OR运算吗?

时间:2012-07-25 17:55:02

标签: objective-c ios bitwise-or uicontrolevents

假设我有以下代码:

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

这些UIControlEvents的按位ORing是否实际上在组合它们的效果方面一起工作,这样如果这些事件中的任何一个发生,选择器中的方法将会触发?

或者是否会导致太多位串在一起以适合一个整数?

1 个答案:

答案 0 :(得分:5)

是的,你可以将控制事件标志组合在一起。

我认为你可能会对按位OR的工作方式感到有些困惑。 ORing不会增加位数,只会增加设置位数。

当您看到如下定义的标志时:

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

它通常是一个线索,它意味着它们可以在一起进行OR运算。

在二进制中,这些标志和OR的结果将是:

UIControlEventTouchDragOutside 00000000000000000000000000001000
UIControlEventTouchDragExit    00000000000000000000000000100000
UIControlEventEditingDidEnd    00000000000001000000000000000000

Result of OR                   00000000000001000000000000101000

正如您所看到的,结果中的位数仍然相同(32),它只是更改的设置位数。

谷歌“二进制算术”和“按位布尔运算符”了解更多信息。

最后一点,Apple docs for addTarget:action:forControlEvents说:

  

<强> controlEvents   指定控件事件的位掩码   动作消息被发送。有关位掩码常量,请参阅“控制事件”。

术语位掩码意味着您可以将此调用的控制事件常量OR组合在一起。