有一天,用户向我报告了一个错误,该错误是在应该启用时禁用的工具栏项.验证代码(为了您的利益而简化)看起来像:
- (BOOL) validateToolbarItem: (NSToolbarItem *) toolbarItem {
NSArray* someArray = /* arrray from somewhere*/
return [someArray count];
}
Run Code Online (Sandbox Code Playgroud)
我花了几分钟才意识到-count返回一个32位的unsigned int,而BOOL是一个8位的signed char.事实上,在这种情况下,someArray中有768个元素,这意味着较低的8位都是0.当int在返回时被转换为BOOL时,它会解析为NO,即使人类希望得到答案是YES.
我已经改变了我的代码,return [someArray count] > 0;但现在我很好奇为什么BOOL真的是一个签名的char.这是真的"更好"在某种程度上它是一个int吗?
objective-c ×1