1
我曾經有一個幫助方法(靜態),它確保在正確的隊列上調用完成塊。GCD棄用方法
+ (void)_deadlockCheckBlock:(void(^)(void))block caller:(dispatch_queue_t)caller {
NSParameterAssert(block);
NSParameterAssert(caller);
if (caller == dispatch_get_current_queue()) {
block();
}
else {
dispatch_async(caller, block);
}}
我們克服
dispatch_get_current_queue()
棄用我已經重寫使用get_main_queue方法的方法。
+ (void)_deadlockCheckBlock:(void(^)(void))block caller:(dispatch_queue_t)caller {
NSParameterAssert(block);
NSParameterAssert(caller);
dispatch_sync(dispatch_get_main_queue(), ^{
//This will ensure to be on the main queue
if (caller == dispatch_get_main_queue()) {
block();
}
else {
dispatch_async(caller, block);
}
});}
有沒有更好的方式來獲得相同的行爲,而不必去主隊列?
所以基本上不是調用_deadlockCheckBlock,只會叫 dispatch_async(來電顯示,{ 塊();} ; 到處 –
在可行的範圍,是其他幫助兩個選項時,它不是。 。 –