换句话说,使用文字但是针对iOS 5。
我知道this但该帖子并不是最终结论。
答案 0 :(得分:22)
您可以将编译器切换出来,但它不会像您想象的那样工作(我刚刚尝试过)。编译SDK有一些要求使用这种新语法(即它适用于以前的iOS版本,但您需要使用iOS 6.0 SDK进行编译)。我不认为我现在可以在这里讨论它们,但在“现代Objective-C”WWDC 2012视频中详细介绍了它们。
基本上,您将拥有语法,但库将不知道如何响应它。
虽然有一个替代理论......我只是没做正确的^^;
最后,您没有 使用4.3来部署到5.x应用。所以我的建议只是升级,它确实没有任何缺点(除非您很快部署应用程序,但在这种情况下,转换所有内容只会是一件麻烦,因为我认为您已经完成了)。
编辑(2个月后,现在iOS 6已公开)。您绝对可以使用类别来解决新的objective-c文字语法的SDK要求。分别针对NSArray
和NSDictionary
添加- (id)objectAtIndexedSubscript:(NSUInteger)idx
和- (id)objectForKeyedSubscript:(id)key
的类别,只返回objectAtIndex:
和objectForKey:
(这就是他们在iOS中所做的事情) 6)。同样,NSMutableArray
和NSMutableDictionary
分别为- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)index
和- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)index
添加类别方法,只需添加对象(如果该对象尚不存在),如果有,则替换它。< / p>
一个问题:iOS 6中YES
和NO
的定义发生了变化,以适应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
原因是在新语法中已经有@( ... )
语法的定义(盒装表达式),旧定义将解析为@(BOOL)1
,这是一个错误。