为了账号安全,请及时绑定邮箱和手机立即绑定

关于ios GCD global_queue

关于ios GCD global_queue

慕尼黑8549860 2019-04-08 11:18:47
我有个函数是将数组存储到本地文件中去。准备dispatch_async到global_queue中执行。如果该函数在极短的时间内执行多次,会不会出现多个任务同时操作该本地文件的情况,这样子做是否安全?如果不安全的话,用什么方法更好?求大神指教
查看完整描述

2 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

globalqueue是异步队列。LZ的操作可能会造成某一时刻进行同时操作文件,导致数据异常。
换句话说对于你的操作不是线程安全的。解决方法有两个
1.使用NSUserDefault来做。但是NSUserDefault有位数限制。
2.自己可以创建一个串行队列然后把然后自己的操作丢到队列里面。
#defineSYNCGCDQUEUE"COM.CONEBOY.APP.GCD.SYNCGCDQUEUE"
@interfaceKKBaseGCDQueue:NSObject
/**
*获取一个自定义的全局同步队列
*
*@return返回全局同步队列
*/
+(dispatch_queue_t)shareSyncGCDQueue;
@end
@implementationKKBaseGCDQueue
+(dispatch_queue_t)shareSyncGCDQueue
{
staticdispatch_queue_tbaseSyncQueue=nil;
staticdispatch_once_tcreateSyncBaseQueue;
dispatch_once(&createSyncBaseQueue,^{
baseSyncQueue=dispatch_queue_create(SYNCGCDQUEUE,NULL);
});
returnbaseSyncQueue;
}
@end
//使用
-(void)writeFiles{
dispatch_sync([KKBaseGCDQueueshareSyncGCDQueue],^{
NSLog(@"blk0");
dispatch_async(dispatch_get_main_queue(),^{
//updateUI
NSLog(@"main_queue---blk0");
});
});
}
                            
查看完整回答
反对 回复 2019-04-08
  • 2 回答
  • 0 关注
  • 534 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信