Objective c 如何从dispatch_sync块中传递var?
我需要从dispatch_sync()的块中提取NSData项。Objective c 如何从dispatch_sync块中传递var?,objective-c,thread-safety,dispatch,Objective C,Thread Safety,Dispatch,我需要从dispatch_sync()的块中提取NSData项。 具体来说,由于编译器错误,我无法在中间块中执行“返回数据”: 将“NSData*(^)(void)”传递到的块指针类型不兼容 类型为'dispatch_block_t'的参数(也称为'void(^)(void)') 错误发生在以下位置: 如果(数据)返回数据;//数据存在于内存缓存中 …我应该在块上放置返回类型vs(void)吗?还是需要重新设计? 一种解决方案是用@synchronized()替换调度 问题:是否可以在调度同步
具体来说,由于编译器错误,我无法在中间块中执行“返回数据”: 将“NSData*(^)(void)”传递到的块指针类型不兼容 类型为'dispatch_block_t'的参数(也称为'void(^)(void)') 错误发生在以下位置: 如果(数据)返回数据;//数据存在于内存缓存中 …我应该在块上放置返回类型vs(void)吗?还是需要重新设计? 一种解决方案是用@synchronized()替换调度
问题:是否可以在调度同步()过程中中断块并返回?问问自己返回值会去哪里。您没有
=dispatch\u sync(…)
,因此您不希望得到结果,因为dispatch\u sync
不会返回结果
dispatch\u sync
获取返回类型为void
的块-您的块不能返回返回类型为的值。但是,块可以分配给具有\uu块
属性的捕获局部变量-就像数据
变量那样,并且您可以分配给块内的局部变量。您不需要分配给数据
并返回它,这似乎就是您要做的
猜猜你想要的是:
dispatch_sync(serialQueue, ^{
data = [_memoryCache objectForKey:fileName];
if (!data) // data is NOT present in memory cache
{
NSString *archivePath = [_cacheDirectory stringByAppendingPathComponent:fileName];
data = [NSData dataWithContentsOfFile:archivePath];
if (data) {
[self cacheData:data toFile:fileName]; // put the recently accessed data to memory cache
}
}
});
嗯
dispatch_sync(serialQueue, ^{
data = [_memoryCache objectForKey:fileName];
if (!data) // data is NOT present in memory cache
{
NSString *archivePath = [_cacheDirectory stringByAppendingPathComponent:fileName];
data = [NSData dataWithContentsOfFile:archivePath];
if (data) {
[self cacheData:data toFile:fileName]; // put the recently accessed data to memory cache
}
}
});