私は次の方法を持っています
+ (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
ブロックを非同期的にディスパッチする呼び出しを行っています。dispatch_sync
またはdispatch_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];