NSMutableArray、NSMutableDictionary,的 copy、allValues 等方法需要加锁保证线程安全吗?

2018-02-08 15:05:18 +08:00
 holonunu

addObject、objectForKey 都需要。 copy、allValues 等方法需要吗?

7015 次点击
所在节点    iDev
3 条回复
ai277014717
2018-02-08 15:48:54 +08:00
如果 copy 或者 allValues 时 remove 了一个或者 removeAll,或者加了一个或多个。理论上有可能发生的吧。
如果 copy 或者 allValues 时不需要保证数据完整性,不需要加,需要的话就加呗。
miketeam
2018-02-08 19:46:31 +08:00
是这样的,如果你开启多线程,然后有读有改的情况下,go 里面都是加读写锁,iOS 的话可以使用 yykit 里面的 threadsafearray,哪里面就是用了锁。如果你不想用锁,参考 cocoalumberjack 这个框架,使用队列同步的方式。你对数组和字典的读写和人家对文件的读写不是一会是么?你可以看看,最后,你倒是说说你的使用场景啊!加锁的性能要次点
Alchemistxxd
2018-02-20 23:17:51 +08:00
多线程的情况下推荐在同一个子系统里,将所有子系统内的 queue,set target 到同一个 serial q 上,可以避免加锁,也可以避免 Context 切换带来额外的开销。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/429462

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX