1

换句话说,使用文字,但针对 iOS 5。

我知道这一点,但该帖子不是决定性的。

4

1 回答 1

22

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

基本上,您将拥有语法,但库不知道如何响应它。

不过还有另一种理论……我只是做得不对^^;

最后,您不必使用4.3 来部署到 5.x 应用程序。所以我的建议只是升级,它真的没有任何缺点(除非你很快部署一个应用程序,但在这种情况下,转换所有东西只是一件麻烦事,因为我假设你几乎完成了)。

编辑(2 个月后现在 iOS 6 是公开的)。您绝对可以使用类别来绕过新的objective-c 文字语法的SDK 要求。NSArray在和NSDictionaryfor- (id)objectAtIndexedSubscript:(NSUInteger)idx- (id)objectForKeyedSubscript:(id)key分别添加只返回objectAtIndex:和的类别objectForKey:(这就是他们在 iOS 6 中所做的)。还 forNSMutableArrayNSMutableDictionaryadd 类别方法 for- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)index- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)index分别简单地添加对象,如果它不存在,如果它存在则替换它。

一个问题:iOS 6 中的定义YESNO更改以适应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哪个是错误的。

于 2012-07-10T06:33:09.003 回答