关于ios GCD global_queue
我有个函数是将数组存储到本地文件中去。
准备dispatch_async到global_queue中执行。
如果该函数在极短的时间内执行多次,会不会出现多个任务同时操作该本地文件的情况,这样子做是否安全?
如果不安全的话,用什么方法更好?
求大神指教
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
global queue是异步队列。LZ的操作可能会造成某一时刻进行同时操作文件,导致数据异常。
换句话说对于你的操作不是线程安全的。解决方法有两个
1.使用NSUserDefault来做。 但是NSUserDefault有位数限制。
2.自己可以创建一个串行队列然后把然后自己的操作丢到队列里面。
存储到本地文件的目的是?
如果是为了保存对象,可以考虑使用缓存:
https://github.com/tumblr/TMCache
或者简单一些,存到NSUserDefault 中
不安全的,global queue是并行queue,所以肯定会发生多个任务同时操作一个文件的情况。所以你应该建立一个自己的queue,自己的queue都是串行的,所以能保证当前只有一个文件操作。你用dispatch_async派遣到那个queue去,既不会卡住UI,也不会造成线程不安全。