iOS 三元条件运算符实现仅在设备上挑剔?
Posted
技术标签:
【中文标题】iOS 三元条件运算符实现仅在设备上挑剔?【英文标题】:iOS ternary conditional operator implementation is picky only on device? 【发布时间】:2011-03-05 16:24:37 【问题描述】:我使用的是 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";
允许它在模拟器和设备上工作。
谁能说出原因?这是一个错误吗? “第二版”更好吗?我应该一直这样写吗?
奇怪的是编译器如何接受两者,模拟器如何同时使用,但设备只接受一个......也许是苹果要检查的错误?
【问题讨论】:
【参考方案1】:这些语句不等价。
// 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。
【讨论】:
正如我所写,我确实运行了以下模拟程序:iPad 3.2、iPad 4.2、iPhone 4.1、iPhone 4.2。它在每种情况下都正确加载了xib。我知道我的初始代码有点不正确,我感谢您的解释(它很好地清除了“转换为 if”)。无论如何,有趣的是模拟人生如何“正确”评估代码而设备没有以上是关于iOS 三元条件运算符实现仅在设备上挑剔?的主要内容,如果未能解决你的问题,请参考以下文章