我最近在模拟器上完成了一些代码工作,并搞砸了设备。为什么? - 这很简单,但我无法解释这个解释。
我做了一些测试,通过创建一个新的基于视图的应用程序,为标签添加了标签和插座,并在viewDidLoad中编写了这段代码:
BOOL b;
if (b) {
label.text = @"Value = YES";
}
else {
label.text = @"Value = NO";
}
有趣的是,结果如下:
iOS模拟器(4.2):值= NO
iOS模拟器(4.3):值=否
iPod Touch 2G(4.2.1)值= YES
iPhone 3G(4.2.1) )值= YES
这表明了什么? - 对我来说,它看起来像在设备上,默认的布尔值是YES,在模拟器上,默认的布尔值是NO。
有人可以澄清是否是这种情况?如果有人能解释这种行为,我会非常感兴趣。
我不对问题的解决方案感兴趣,显然可以通过手动设置所需的默认值(在我的情况下为NO
)来解决。
感谢。
答案 0 :(得分:5)
Objective-C只是C的超集,在C中声明这样的变量只是在堆栈上给它内存。声明时,变量未设置为任何值,因此堆栈中的最后一个变量现在位于变量b
中。
简而言之,它是未定义的,并且会因实现而异。这就是规范所说的。
答案 1 :(得分:4)
未定义未定义的行为。