我正在使用一個庫(Fast Image Cache),該庫具有一個可能會或可能不會同步調用的塊的方法。如何確定塊是否在運行時同步運行
我試圖確定哪些是使用下面的代碼塊中的情況:
__block BoolSleeve* sync = [[BoolSleeve alloc] init];
sync.value = YES;
[object block:^{
if (sync.value)
NSLog(@"sync");
else
NSLog(@"async");
}];
sync.value = NO;
然而,到目前爲止,這和許多相關的變化都未能預計何時打印「異步」。
BTW,BoolSleeve是:
@interface BoolSleeve : NSObject
@property (assign, nonatomic) BOOL value;
@end
我不認爲你的測試是有效的。理論上,塊可以異步運行,並且在其他線程中將「sync.value」設置爲NO之前仍然可以完成。這是一個競賽條件。 – Macondo2Seattle
塊絕對不是定義異步。它們只是包含在對象中的一些捕獲狀態的常規函數。 –
嘗試在塊中打印'[NSThread isMainThread]'的結果。 – Macondo2Seattle