YCThreadSafeMutableCollection 0.1.0

YCThreadSafeMutableCollection 0.1.0

Yuchen Peng 维护。



  • 作者
  • Yuchen Peng

YCThreadSafeMutableCollection

CocoaPods Platform Support License MIT

示例

要运行示例项目,请克隆仓库,并首先从示例目录中运行 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
)