假设我有以下代码:
[somevalue_field
addTarget:self
action:@selector(somevalue_fieldDidChange:)
forControlEvents:UIControlEventEditingDidEnd | UIControlEventTouchDragExit |
UIControlEVentTouchDragOutside ];
这些UIControlEvents的按位ORing是否实际上在组合它们的效果方面一起工作,这样如果这些事件中的任何一个发生,选择器中的方法将会触发?
或者是否会导致太多位串在一起以适合一个整数?
答案 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组合在一起。