我有一个很大的NSMutableString (可能有几百兆字节),需要对它执行大量的rangeOfCharacterFromSet:操作。
为了提高性能,我希望让NSOperationQueue将字符串拆分成大约100kb的块,并异步处理每个块。
但是因为字符串太大,所以为每个线程制作不可变的副本是不可行的。
假设我不允许修改字符串(我打算阻塞主线程,直到操作队列完成),这安全吗?
苹果文档中的NSString是线程安全的,所有不可变对象都是“一般”不是线程安全的,但它大概只适用于某些方法?rangeOfCharacterFromSet是我唯一使用的。
这段代码可以在OS X和iOS上运行(在iOS上通常使用较小的字符串)
发布于 2013-05-04 08:38:17
虽然我怀疑NSMutableString (或至少其常见实现)对此是安全的,但最安全的答案可能是创建一个不可变的副本,然后针对该副本执行所有操作。
我的警告是,非常大的NSMutableStrings可能在内部实现为树,如果该树在读取时执行延迟重新平衡,则可能存在线程安全问题。
https://stackoverflow.com/questions/16369329
复制相似问题