iOS 6中NSMapTable的订阅语法

时间:2012-10-31 00:51:34

标签: objective-c syntax objective-c-category

我在iOS 6项目的许多地方使用NSMapTable,并且希望能够使用新的字典下标样式来访问对象。 (NSMapTable的行为大多类似于NSMutableDictionary,但可以为其存储的键和值配置各种内存管理选项。this StackOverflow question中的更多背景。)

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

  

在“NSMapTable *”类型的对象上找不到字典元素的预期方法。

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

2 个答案:

答案 0 :(得分:4)

答案其实很简单;有关如何实现下标的详细信息,请参阅this question。添加这样的类别。

部首:

@interface NSMapTable (Subscripting)

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

@end

实现:

@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

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

答案 1 :(得分:2)

使用php -d memory_limit=-1 composer.phar update 设置NSDictionary密钥对象的行为改进了@mjh回答并添加了Obj-C Generics:

nil