我有以下方法
+ (NSString*)getMeMyString
{
NSString *result;
dispatch_async(dispatch_get_main_queue(), ^{
result = [ClassNotThreadSafe getString];
});
return result;
}
我怎样才能使块同步完成它的工作,以便它在被检索之前不返回结果?
我有以下方法
+ (NSString*)getMeMyString
{
NSString *result;
dispatch_async(dispatch_get_main_queue(), ^{
result = [ClassNotThreadSafe getString];
});
return result;
}
我怎样才能使块同步完成它的工作,以便它在被检索之前不返回结果?
您正在调用dispatch_async
which 异步调度您的块。尝试使用dispatch_sync
ordispatch_main
如果您的目标是阻塞主线程。
+ (NSString*)getMeMyString
{
__block NSString *result;
dispatch_sync(dispatch_get_main_queue(), ^{
result = [ClassNotThreadSafe getString];
});
return result;
}
大中央调度参考
使用dispatch_sync
而不是dispatch_async
- 那么当前线程将被阻塞,直到该块在主线程上完成执行。
既然您似乎想在不同的线程上执行一个方法并获得一个返回值,为什么不使用 NSInvocation 呢?
SEL theSelector;
NSMethodSignature *aSignature;
NSInvocation *anInvocation;
theSelector = @selector(getString);
aSignature = [ClassNotThreadSafe instanceMethodSignatureForSelector:theSelector];
anInvocation = [NSInvocation invocationWithMethodSignature:aSignature];
[anInvocation setSelector:theSelector];
NSString *result;
[anInvocation performSelectorOnMainThread:@selector(invoke) withObject:nil waitUntilDone:YES];
[anInvocation getReturnValue:result];