LLVM 4.0可以在Xcode 4.3中使用吗?

换句话说,使用文字,但iOS 5的目标。

我意识到这一点,但这个职位并不确定。

你可以切换编译器,但它不会像你想象的那样工作(我刚刚尝试过)。 对于使用这种新语法,编译SDK有一些要求(即它可以在以前的iOS版本上工作,但是需要使用iOS 6.0 SDK进行编译)。 目前我不认为我可以在这里讨论它们,但在“现代Objective-C”WWDC 2012video中详细介绍了这些内容。

基本上,你会有语法,但图书馆不知道如何回应。

有一个替代理论,虽然…我只是没有做到这一点^^;

最后,您不必使用4.3部署到5.x应用程序。 所以我的build议只是升级,其实并没有什么坏处(除非你正在部署一个应用程序,但在这种情况下,转换所有东西只是一个麻烦,因为我们假设你几乎已经完成了)。

编辑 (2个月后,现在的iOS 6是公开的)。 您肯定可以使用类别来解决新的Objective-C文字语法的SDK要求。 在NSArrayNSDictionary上分别添加- (id)objectAtIndexedSubscript:(NSUInteger)idx- (id)objectForKeyedSubscript:(id)key分别返回objectAtIndex:objectForKey:这就是他们在iOS 6中所做的)。 另外对于NSMutableArrayNSMutableDictionary- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)index- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)index分别添加对象。现在还不存在,如果有的话就更换它。

一个catch: YESNO的定义在iOS 6中改变,以适应NSNumber布尔文字。 所以你需要做到以下几点:

 #if __has_feature(objc_bool) #undef YES //Before it was (BOOL)1 #undef NO //Before it was (BOOL)0 #define YES __objc_yes #define NO __objc_no #endif 

原因是在新语法中已经有了@( ... )语法(盒装expression式)的定义,旧定义将parsing为@(BOOL)1 ,这是一个错误。