0

假设我有以下代码:

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

这些 UIControlEvents 的按位 ORing 是否会在组合它们的效果方面真正协同工作,以便如果这些事件中的任何一个发生,选择器中的方法就会触发?

或者这会导致太多位串在一起以适应一个整数吗?

4

1 回答 1

5

是的,您可以将控制事件标志或在一起。

我想你可能对按位或的工作原理有点困惑。ORing 不会增加位数,它只是增加设置位数。

当您看到这样定义的标志时:

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

这通常是一个线索,表明它们可以被 ORed 在一起。

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

UIControlEventTouchDragOutside 000000000000000000000000000001000
UIControlEventTouchDragExit 00000000000000000000000000100000
UIControlEventEditingDidEnd 00000000000001000000000000000000

OR 00000000000001000000000000101000 的结果

如您所见,结果中的位数仍然相同(32),只是设置的位数发生了变化。

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

最后一点,Apple文档addTarget:action:forControlEvents说:

controlEvents 一个位掩码,指定为其发送操作消息的控制事件。有关位掩码常量,请参见“控制事件”。

术语位掩码意味着您可以或一起使用此调用的控制事件常量。

于 2012-07-25T18:04:14.077 回答