ma1*_*w28 13 boolean objective-c
请问下面的函数返回YES如果object != nil?
- (BOOL)boolForObject:(id)object {
return (BOOL)object;
}
Run Code Online (Sandbox Code Playgroud)
我已经测试过,object = [[NSObject alloc] init]但结果好坏参半.
pro*_*rmr 29
指针大于BOOL,因此当您转换它时,它将截断并仅占用指针的8个最低有效位并使其成为BOOL.如果这些位都碰巧为零,那么这相当于NO.
所以回答你的问题,不,它没有(有时它会取决于指针值)
以下是在32位架构上使用Xcode 5.1.1的示例:
void* p = (void*)0xfeeeff00;
BOOL b = (BOOL)p;
NSLog(@"p=%08x (%lu), b=%08x (%lu)", (uint32_t)p, sizeof p, (uint32_t)b, sizeof b);
Run Code Online (Sandbox Code Playgroud)
打印出来:
p=feeeff00 (4), b=00000000 (1)
Run Code Online (Sandbox Code Playgroud)
你方法的实际目的是什么?
如果只是检查对象是否为零,为什么不这样做:
- (BOOL)boolForObject:(id)object
{
return (object != nil);
}
Run Code Online (Sandbox Code Playgroud)
结果会更明显.