在 Xcode 4.4 和 iOS 4.3+ 中使用下标语法

原文: http://petersteinberger.com/blog/2012/using-subscripting-with-Xcode-4_4-and-iOS-4_3/

Xcode 4.4 GM 版本发布,你可以在 4.4 中使用新的“下标”语法。苹果将在新的OSX 和 iOS 版本中引入这个特性,但还得等等。下列代码段摘自 PSPDFKit,它使你现在就能使用这个特性:

// Add support for subscripting to theiOS 5 SDK.

#if __IPHONE_OS_VERSION_MAX_ALLOWED< 60000

@interface NSObject(PSPDFSubscriptingSupport)

-(id)objectAtIndexedSubscript:(NSUInteger)idx;

- (void)setObject:(id)objatIndexedSubscript:(NSUInteger)idx;

- (void)setObject:(id)objforKeyedSubscript:(id <NSCopying>)key;

- (id)objectForKeyedSubscript:(id)key;

@end

#endif

这种处理过于简单了,无论你在任何对象上调用下标语法,Xcode 都不会报错。但你忍不住会问,这样行不行啊?当然,这只是临时的措施,仅仅是为了通过Xcode 4.4 的编译。

在 Xcode 4.5 中,这段代码没有任何意义,因为新的 SDK 已经定义了这些方法。确保在全局头文件(例如.pch文件)中引用这些代码。

注意,这不同于枚举。枚举已经是一种真正的语法糖,枚举已经内置在 Xcode4.4+(LLVM 4.0+)中。下标实际上是调用了新的方法。那么这段特殊的代码(只有方法定义,没有实现)是怎么起作用的?

感谢 Mike AshCédric Luthi 的解释:

实际上,下标索引已经包含在 ARCLite 中了。ARCLite 的load 函数用 class_addMethod 动态地加了 4 个方法。在这些方法的实现中,实际上是简单地调用了非下标方法而已。

// objectAtIndexedSubscript: method isimplemented like this:

id__arclite_objectAtIndexedSubscript(NSArray *self, SEL _cmd, NSUInteger idx)

{

return [self objectAtIndex:idx];

}

如果你因为某些原因,不能使用 ARC,你只想强制让编译器连接到libarclite,那么可以使用

-fobjc-arc连接标志。这将可在 iOS4.3 中生效。

最好,下载新的 Xcode Refactoring Assistant 将你的代码转换为最新的O-C 代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值