我知道NSMutableArray不应该被信任为线程安全的,但如果我只调用[array addObject:object]
而我不会以任何其他方式访问数组 ?
例如:
NSMutableArray* array = [[NSMutableArray alloc] init];
[self.subviews
enumerateObjectsWithOptions:NSEnumerationConcurrent
usingBlock:^(UIView* view, NSUInteger idx, BOOL *stop) {
if ([self methodThatReturnsBool:view]) [array addObject:view];
}];
感谢您的任何建议! :)
答案 0 :(得分:2)
NSMutableArray不保证是线程安全的 - 甚至不只是添加对象,因为使线程安全需要addObject:
是一个原子操作,这不是类合同的一部分。
一般来说,如果文档说“这是线程安全的”,它是线程安全的(至少是孤立的),但是如果文档没有这么说,你应该认为它是不安全的,你需要使用同步。
答案 1 :(得分:1)
正如Bryan Chen指出的那样,NSEnumerationConcurrent线程将导致块在不同的线程上运行"同时"。修改NSMutableArray不能同时从不同的线程完成。
Apple的文档说https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Multithreading/ThreadSafetySummary/ThreadSafetySummary.html#//apple_ref/doc/uid/10000057i-CH12-SW1说"在大多数情况下,只要您一次只使用一个线程,就可以从任何线程使用这些类。&#34 ;
所以,在你的情况下,你不应该做你想做的事。