YCThreadSafeMutableCollection
示例
要运行示例项目,请克隆仓库,并首先从示例目录中运行 pod install
。
示例项目展示了使用 YCThreadSafeMutableCollection 解决的几个线程问题和方案。
它是针对 NSMutableArray、NSMutableDictionary 和 NSMutableSet API 设计的线程安全,但不适用于 for in。
for (NSNumber *number in array) {
NSLog(@"%@", number);
}
注意:如果对可变集合进行归档和解档,您将不会得到线程安全的版本。
- (void)archiveLimitation
{
YCThreadSafeMutableArray *array = [[YCThreadSafeMutableArray alloc] init];
[array addObject:@0];
[array addObject:@1];
[array addObject:@2];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];
YCThreadSafeMutableArray *unarchiveArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];
NSLog(@"%@", NSStringFromClass(unarchiveArray.class));
NSLog(@"%@", unarchiveArray);
}
// NSLog
__NSArrayM
(
0,
1,
2
)
安装
YCThreadSafeMutableCollection 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile:
pod 'YCThreadSafeMutableCollection'
作者
Yuchen Peng, [email protected]
许可证
YCThreadSafeMutableCollection 适用于 MIT 许可证。更多详细信息请参阅 LICENSE 文件。
示例
要运行示例项目,请先克隆,然后请在 Example 文件夹下执行 pod install
。
实例项目演示了几个线程问题,并且 YCThreadSafeMutableCollection 可以解决这些问题。
注意:尽管 NSArray、NSMutableDictionary 和 NSMutableSet 的 API 都具有线程安全性,但 for in 循环是不安全的。
for (NSNumber *number in array) {
NSLog(@"%@", number);
}
注意:如果对可变集合进行了归档和解归档,您将无法得到一个线程安全的版本。
- (void)archiveLimitation
{
YCThreadSafeMutableArray *array = [[YCThreadSafeMutableArray alloc] init];
[array addObject:@0];
[array addObject:@1];
[array addObject:@2];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];
YCThreadSafeMutableArray *unarchiveArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];
NSLog(@"%@", NSStringFromClass(unarchiveArray.class));
NSLog(@"%@", unarchiveArray);
}
// NSLog
__NSArrayM
(
0,
1,
2
)