iOS 三元条件运算符实现仅在设备上挑剔?

发布于 2024-10-20 20:24:38 字数 475 浏览 6 评论 0原文

我正在使用 iOS SDK 4.2。

我认为三元条件运算在模拟器(iPhone4.1、4.2。iPad 3.2、4.2)上的实现方式与实际设备上不同。因为:

iPad ? xibName = @"MyViewController-iPad" : @"MyViewController";

在这些模拟器上工作完美,但在我的 iPhone 4 (4.1) 上失败,

同时以这种方式编写:

xibName = (iPad) ? @"MyViewController-iPad" : @"MyViewController";

允许它在模拟器和设备上工作。

任何人都可以告诉为什么?这是一个错误吗? “第二版”更好吗?我应该总是这样写吗?

奇怪的是编译器如何接受两者,模拟器如何与两者一起工作,但设备只接受一个......也许是苹果要检查的错误?

I'm using iOS SDK 4.2.

I think that the ternary conditional op is(?) implemented differently on the simulators (iPhone4.1, 4.2. iPad 3.2, 4.2) than on actual devices. Because:

iPad ? xibName = @"MyViewController-iPad" : @"MyViewController";

works perfect on those simulators but fails on my iPhone 4 (4.1)

while writing this way:

xibName = (iPad) ? @"MyViewController-iPad" : @"MyViewController";

allows it to work on both the simulators and device.

Anyone can tell why? Is it a bug? Is the "2nd version" better and i should always write that way?

it's strange how compiler accepts both and simulators work with both but the device only accepts one... maybe a bug for apple to check out?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

彩扇题诗 2024-10-27 20:24:38

这些陈述并不等同。

// iPad ? xibName = @"MyViewController-iPad" : @"MyViewController";
if ( iPad ) {
    xibName = @"MyViewController-iPad";
} else {
    @"MyViewController"; // Effectively a NOP
}

// xibName = (iPad) ? @"MyViewController-iPad" : @"MyViewController";
if ( iPad ) {
    xibName = @"MyViewController-iPad";
} else {
    xibName = @"MyViewController";
}

对于 !iPad (比如,在 iPhone 4 上),第一个语句 xibName 根本不会被设置,我猜你只运行了 iPad 模拟器,而不是 iPhone。

These statements are not equivalent.

// iPad ? xibName = @"MyViewController-iPad" : @"MyViewController";
if ( iPad ) {
    xibName = @"MyViewController-iPad";
} else {
    @"MyViewController"; // Effectively a NOP
}

// xibName = (iPad) ? @"MyViewController-iPad" : @"MyViewController";
if ( iPad ) {
    xibName = @"MyViewController-iPad";
} else {
    xibName = @"MyViewController";
}

For !iPad ( like say, on an iPhone 4 ) with the first statement xibName would not get set at all, I am guessing you only ran an iPad simulator, not an iPhone.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文