可以使用nil作为BOOL NO吗?

时间:2015-06-29 08:26:18

标签: ios objective-c uitableview null boolean

我想取消选择UITableView中突出显示的每个可见单元格。我尝试了这行代码,我很惊讶它确实有效。

[[self.tableView visibleCells]makeObjectsPerformSelector:@selector(setHighlighted:)withObject:nil];

所以我尝试了相反的方法,用这个突出显示每个单元格:

[[self.tableView visibleCells]makeObjectsPerformSelector:@selector(setHighlighted:)withObject:[NSObject new]];

它适用于!像这样编码可以吗?使用object或nil代替布尔值YES或NO?或者会引起任何问题吗?

1 个答案:

答案 0 :(得分:6)

  

[...]我很惊讶它确实有效。

事实证明这是巧合的。它高度依赖于体系结构的调用约定和对象的实际地址。

例如,如果[NSObject new]将返回一个对齐到256字节(尾随十六进制数字00)的地址的对象,则可能会将其解释为NO

  

这样编码可以吗?

绝对不是。正如我所说,它很脆弱,可能会混淆其他开发人员。

这里是C标准的摘录(关于调用与声明不匹配的参数类型的函数):

  

6.5.2.2函数调用

     

[...]

     

9)如果定义的函数的类型与表示被调用函数的表达式指向的类型(表达式)不兼容,则行为未定义。