换句话说,使用文字,但针对 iOS 5。
我知道这一点,但该帖子不是决定性的。
您可以切换编译器,但它并不像您想象的那样工作(我刚刚尝试过)。使用这种新语法对编译 SDK 有一些要求(即它可以在以前的 iOS 版本上工作,但您需要使用 iOS 6.0 SDK 编译它)。我不认为我现在可以在这里讨论它们,但它们在“Modern Objective-C”WWDC 2012 视频中有详细介绍。
基本上,您将拥有语法,但库不知道如何响应它。
不过还有另一种理论……我只是做得不对^^;
最后,您不必使用4.3 来部署到 5.x 应用程序。所以我的建议只是升级,它真的没有任何缺点(除非你很快部署一个应用程序,但在这种情况下,转换所有东西只是一件麻烦事,因为我假设你几乎完成了)。
编辑(2 个月后现在 iOS 6 是公开的)。您绝对可以使用类别来绕过新的objective-c 文字语法的SDK 要求。NSArray
在和NSDictionary
for- (id)objectAtIndexedSubscript:(NSUInteger)idx
和- (id)objectForKeyedSubscript:(id)key
分别添加只返回objectAtIndex:
和的类别objectForKey:
(这就是他们在 iOS 6 中所做的)。还 forNSMutableArray
和NSMutableDictionary
add 类别方法 for- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)index
和- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)index
分别简单地添加对象,如果它不存在,如果它存在则替换它。
一个问题: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
哪个是错误的。