我在iOS 6项目的许多地方使用NSMapTable
,并且希望能够使用新的字典下标样式来访问对象。 (NSMapTable
的行为大多类似于NSMutableDictionary
,但可以为其存储的键和值配置各种内存管理选项。this StackOverflow question中的更多背景。)
编译器在尝试在NSMapTable
实例上使用下标语法时报告此情况:
在“NSMapTable *”类型的对象上找不到字典元素的预期方法。
如何使用类别扩展NSMapTable
以允许新的NSDictionary
式下标?
答案 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