我最近有一些代码在模拟器上完美运行,但在设备上搞砸了。为什么? - 这很简单,但我无法解释解释。
我做了一些测试,创建了一个新的基于 View 的应用程序,添加了标签和标签的导出,并在 viewDidLoad 中编写了这段代码:
BOOL b;
if (b) {
label.text = @"Value = YES";
}
else {
label.text = @"Value = NO";
}
有趣的是,这是结果:
iOS Simulator (4.2): Value = NO
iOS Simulator (4.3): Value = NO
iPod Touch 2G (4.2.1) Value = YES
iPhone 3G (4.2.1) Value = YES
这意味着什么? - 在我看来,在设备上,默认 boolean 值是 YES,而在模拟器上,默认 boolean 值是 NO。
谁能澄清一下是否是这种情况?另外,如果有人可以解释这种行为,我会非常感兴趣。
我对问题的解决方案不感兴趣,显然可以通过手动设置所需的默认值(在我的例子中为NO
)来解决。
谢谢。
最佳答案
Objective-C 只是 C 的超集,在 C 中声明这样的变量只是在堆栈上为其提供内存。该变量在声明时未设置任何值,因此堆栈中最后的内容现在位于您的变量 b
中。
简而言之,它是未定义的,并且会因实现而异。规范就是这么说的。
关于iPhone - 设备上的不同默认 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8273013/