Code Bye

iOS dispatch_sync

– (NSUInteger)getSize {
__block NSUInteger size = 0;
dispatch_sync(self.ioQueue, ^{
NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtPath:self.diskCachePath];
for (NSString *fileName in fileEnumerator) {
NSString *filePath = [self.diskCachePath stringByAppendingPathComponent:fileName];
NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];
size += [attrs fileSize];
}
});
return size;
}
self.ioQueue是一个同步队列。
整个方法执行过程中,为什么会等到dispatch_sync执行完后 然后返回size。而不是直接返回size 其他线程同步执行block中的内容。
解决方案

7

dispatch_sync的作用就是保证它的block执行完后,才能执行后面的语句;
假如不能保证,那么返回的size不就是错误的值吗?

13

你在看SDWebImage啊?本人刚好也在看,dispatch_sync是同步执行的,就是说必须他的block里执行完了之后再执行后面的;dispatch_async是异步的,直接执行后面的语句而不用等待里面的block之行完成。他用了另一个线程的原因是为了线程安全。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明iOS dispatch_sync