【发布时间】:2015-07-02 18:47:01
【问题描述】:
来自这篇文章的参考link 我使用 NSMutableDictionary 存储我需要的信息的相同概念实现了一个类似的类别。但是原帖中有一点让我很困惑
- (NSMutableDictionary *)addl_associatedDictionary
{
NSMutableDictionary *res = nil;
@synchronized(self)
{
if (!(res = [self addl_associatedDictionaryPrimitive]))
{
res = [self addl_generateAssociatedDictionary];
}
}
return res;
}
我知道@synchronized 关键字是对多线程的保护。但是当我浏览其他示例时,大多数时候都没有使用保护。那么保护有必要吗?我也可以使用静态 dispatch_once_t 来替换 @synchronized 吗?下面是我在 .m 文件中的代码片段
@dynamic associatedDict;
-(void)setAssociateValue:(NSMutableDictionary*)dict
{
objc_setAssociatedObject(self, @selector(associatedDict), dict, OBJC_ASSOCIATION_RETAIN);
}
-(id)getAssociateValue
{
return objc_getAssociatedObject(self, @selector(associatedDict));
}
-(NSMutableDictionary*)associatedDict
{
NSMutableDictionary* dict=[self getAssociateValue];
if(!dict)
{
dict=[[NSMutableDictionary alloc]init];
[self setAssociatedDict:dict];
}
return dict;
}
-(void)setAssociateDict:(NSMutableDictionary *)associatedDict
{
[self setAssociatedDict:associatedDict];
}
-(id)associate_getObjectForKey:(NSString*)key
{
return self.associatedDict[key];
}
-(void)associate_setObject:(id)obj forKey:(NSString*)key
{
[self.associatedDict setObject:obj forKey:key];
}
【问题讨论】:
标签: ios objective-c concurrency associated-object