参考这篇文章链接 ,我使用相同的概念实现了一个类似的类别,即使用 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];
}