gpt4 book ai didi

objective-c - 线程安全NSMutableDictionary

转载 作者:行者123 更新时间:2023-12-03 13:19:14 25 4
gpt4 key购买 nike

我写的类SafeMutableDictionary继承了NSMutableDictionary。
该类仅实现“原始”方法,即must be inherits
来自NSDictionary:

- (instancetype)init;
- (instancetype)initWithObjects:(const id [])objects forKeys:(const id<NSCopying>[])keys count:(NSUInteger)cnt;
- (NSUInteger)count;
- (id)objectForKey:(id)key;
- (NSEnumerator*)keyEnumerator;

并来自NSMutableDictionary:
- (void)removeObjectForKey:(id)key;
- (void)setObject:(id)obj forKey:(id)key;

通过使用NSMutableDictionary类型的 内部变量来支持线程安全,该变量包含所有数据
@interface SafeMutableDictionary () {
__strong NSMutableDictionary* _dictEmbedded;
}

并使用 @synchronized块对其进行每次 包装。
- (id)objectForKey:(id)key{
@synchronized (_dictEmbedded) {
return [_dictEmbedded objectForKey:key];
}
}

github中使用完整代码进行 repo 。

但是,不幸的是,我仍然会因以下错误而崩溃
Collection <__NSDictionaryM: 0x16784ff0> was mutated while being enumerated.

所以,我有一些问题:
1)我的实现是正确的吗?我错过了什么?
2)是否存在更著名且经过测试的解决方案?
3)从主线程和bg线程同时访问容器的最佳实践是什么?
进行此类继承可能是最糟糕的做法,并且最好使用原始容器+维护线程安全性。

最佳答案

关于objective-c - 线程安全NSMutableDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39740426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com