iPhone - 设备上的不同默认 boolean 值

标签 iphone objective-c boolean

我最近有一些代码在模拟器上完美运行,但在设备上搞砸了。为什么? - 这很简单,但我无法解释解释。

我做了一些测试,创建了一个新的基于 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/

相关文章:

ios - 未选择的 UITableView 行列表

objective-c - 使用 IBAction 从我的应用程序打开 native Twitter 应用程序

ios - 从 url 获取的图像以及如何在 iPhone 中减小图像大小

list - 串联前后的列表检查具有不同的结果

ios - HealthKit - 我们可以先请求一些权限,然后再请求更多权限吗?

iphone - 如何确定手机和平板电脑网页的 html 元素的大小

iphone - 从格式化程序返回的字符串中的错误日期!为什么?

iphone - 子类 UIButton 还是继承自 UIControl?

c++ - Bool 始终评估为真

python - 如何获取 boolean numpy 数组和另一个 boolean 数组的相对补集?