【发布时间】:2013-04-28 11:19:46
【问题描述】:
我有一个很大的 NSMutableString(可能有数百兆字节),需要对其执行大量 rangeOfCharacterFromSet: 操作。
为了提高性能,我希望有一个 NSOperationQueue 将字符串拆分为约 100kb 的块并异步处理每个块。
但由于字符串太大,为每个线程制作不可变副本是不可行的。
假设我不允许修改字符串(我打算阻塞主线程直到操作队列完成),这样安全吗?
Apple 将 NSString 记录为线程安全,所有不可变对象“通常”不是线程安全的,但大概只适用于某些方法? rangeOfCharacterFromSet 是我唯一使用的。
此代码将在 OS X 和 iOS 上运行(通常在 iOS 上使用较小的字符串)
【问题讨论】:
-
为什么每个线程都有原始 NSString 的单独“副本”?如果不允许修改字符串,为什么还要使用 NSMutableString?
-
为什么要阻塞主线程?如果您要这样做,那么线程的目的是什么?
-
我还有一个问题:您是否真的测试过性能,还是只是猜测?您知道存在需要拆分字符串的性能问题吗?
-
matt:在这种情况下,大概 Abhi 是在并发,而不是异步之后
-
这是
dispatch_apply的工作吗?
标签: objective-c multithreading thread-safety