小编mbo*_*das的帖子

为什么BOOL是签名字符?

有一天,用户向我报告了一个错误,该错误是在应该启用时禁用的工具栏项.验证代码(为了您的利益而简化)看起来像:

- (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

9
推荐指数
3
解决办法
2977
查看次数

标签 统计

objective-c ×1