【发布时间】:2016-05-20 10:50:29
【问题描述】:
我需要实现一个在某种意义上模仿MKMapView 的界面。具体来说,我需要支持方法
-(void)addAnnotation:(id<MyAnnotation>)annotation;
-(UIView *)viewForAnnotation:(id<MyAnnotation>)annotation;
在内部有一个将注解映射到UIView 对象(可能为空)的映射。
那么我应该如何存储这些注解和对应的视图呢?自然的选择是NSMutableDictionary:
@property(nonatomic) NSMutableDictionary *m_dict;
-(void)addAnnotation:(id<MyAnnotation>)annotation {
UIView *view = ....;
if (view) {
[_m_dict setObject:view forKey:annotation];
}
else {
[_m_dict setObject:[NSNull null] forKey:annotation];
}
}
-(UIView *)viewForAnnotation:(id<MyAnnotation>)annotation {
id ret = [_m_dict objectForKey:annotation];
if ([ret isKindOfClass:[UIView class]]) {
return ret;
}
return nil;
}
但它不起作用,因为不能保证id<MyAnnotation> 符合NSCopying。
我考虑将id<MyAnnotation> 保存为原始指针,然后将指针存储到NSNumber(符合NSCopying)。但我不确定这是一个好主意以及如何安全地实施它。
【问题讨论】:
-
你考虑过 NSHashTable 吗? nshipster.com/nshashtable-and-nsmaptable
标签: ios objective-c nscopying