我有个函数是将数组存储到本地文件中去。准备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(),^{//updateUINSLog(@"main_queue---blk0");});});}
添加回答
举报
0/150
提交
取消