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

xfz*_*fze 1 iphone ternary-operator ios ios-4.2 ios-simulator

我正在使用iOS SDK 4.2.

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

iPad ? xibName = @"MyViewController-iPad" : @"MyViewController";
Run Code Online (Sandbox Code Playgroud)

在那些模拟器上工作得很好但在iPhone 4(4.1)上失败了

这样写的时候:

xibName = (iPad) ? @"MyViewController-iPad" : @"MyViewController";
Run Code Online (Sandbox Code Playgroud)

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

谁能说出原因?这是一个错误吗?"第二版"是否更好,我应该总是那样写?

奇怪的是,编译器如何接受这两者并且模拟器同时使用两者,但设备只接受一个......可能是苹果检查的错误?

Dre*_*Dre 10

这些陈述不等同.

// 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";
}
Run Code Online (Sandbox Code Playgroud)

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