jam*_*ack 1 xcode objective-c llvm ios
换句话说,使用文字但是iOS 5的目标.
我知道这一点,但该帖子并不是决定性的.
bor*_*den 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分别只是添加对象(如果它尚不存在),如果它已经存在则替换它.
一个问题: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
Run Code Online (Sandbox Code Playgroud)
原因是在新语法中已经有了语法定义@( ... )(盒装表达式),旧定义将解决@(BOOL)1哪个是错误.
| 归档时间: |
|
| 查看次数: |
1173 次 |
| 最近记录: |