iOS 6中NSMapTable的订阅语法

mjh*_*mjh 5 syntax objective-c objective-c-category

我正在NSMapTableiOS 6项目中的许多地方使用,并希望能够使用新的字典下标样式来访问对象.(NSMapTable表现最像是一个NSMutableDictionary,但可以为它存储的键和值配置各种内存管理选项.此StackOverflow问题的更多背景.)

尝试在NSMapTable实例上使用下标语法时,编译器会报告此情况:

读取未在"NSMapTable*"类型的对象上找到的字典元素的预期方法.

如何使用类别扩展NSMapTable以允许新式NSDictionary下标?

mjh*_*mjh 5

答案其实很简单;有关如何实现订阅的更多信息,请参阅此问题。添加一个这样的类别。

标题:

@interface NSMapTable (Subscripting)

- (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key;
- (id)objectForKeyedSubscript:(id)key;

@end
Run Code Online (Sandbox Code Playgroud)

执行:

@implementation NSMapTable (Subscripting)

- (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key {
    [self setObject:obj forKey:key];
}

- (id)objectForKeyedSubscript:(id)key {
    return [self objectForKey:key];
}

@end
Run Code Online (Sandbox Code Playgroud)

这让我暂时想知道,在某些或所有情况下,下标访问是否实际上比替代方案慢一点,但“过早优化”一词使这种想法变得无关紧要。

  • @RudolfAdamkovic,您可以避免在订阅方法声明中使用“NSCopying”。 (2认同)