我正在使用开源软件TMCache。它节省了昂贵的数据以异步缓存。还有一种同步方法。
它用于dispatch_semaphore_wait()
等待操作结束。
- (id)objectForKey:(NSString *)key
{
if (!key)
return nil;
__block id objectForKey = nil;
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
[self objectForKey:key block:^(TMCache *cache, NSString *key, id object) {
objectForKey = object;
dispatch_semaphore_signal(semaphore);
}];
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
#if !OS_OBJECT_USE_OBJC
dispatch_release(semaphore);
#endif
return objectForKey;
}
这在我的机器上运行良好。在同事的机器上没有。该程序在 停止工作dispatch_semaphore_wait()
。这对我来说绝对不可复制。
上面的方法是 in 调用的tableView:viewForTableColumn:row:
,
所以在主队列中执行。
知道为什么会这样吗?我必须在另一个队列中使用该方法吗?