塊很棒。因爲我認爲我理解了他們,所以我想提高賭注並在更復雜的情況下使用它們。現在這些街區正在踢我的臉,我試圖把它分解成可理解的片斷。如何在主隊列或線程上分派參數塊
假設我在這個僞代碼中有兩個方塊,名字爲blockA
和blockB
。第一個是一個簡單的無參數塊,它只是打印一行。第二個需要id
類型的一個參數xyz
:
void (^blockA){ NSLog(@"Doing something"); };
void (^blockB)(id xyz){ [xyz doSomething]; };
當運行blockA
,我會做類似blockA();
或當我想指定的主隊列/線程,我用的是dispatch_sync
或_async
方法:
dispatch_sync(dispatch_get_main_queue(), blockA);
雖然我知道如何用blockB(someObject);
等參數調度blockB
,但我無法弄清楚如何在主線程上顯式調用該函數。我一直在尋找類似的下一行,但當然這不是這是如何工作的:
dispatch_sync(dispatch_get_main_queue,blockB,someObject);
現在我已經嘗試在另一個塊中包裝塊,但說實話,只是看起來不正確,它感覺它引起的問題比解決問題更多。是否有其他的東西,而不是包裝塊來調度主隊列/線程上的一個或多個參數的一個塊?
我得到一個可怕的網絡鎖定崩潰,我不能追溯到它的起源:*試圖從一個線程獲取網絡鎖定其他比主線或網線。這可能是從輔助線程調用UIKit的結果。現在崩潰... *這就是爲什麼我打破了這個問題,因爲在這一點上運行的任何代碼應該已經在主線程上運行。我認爲嵌套塊可能會造成這種情況,但是從你所說的看起來它是另一回事。 – epologee
只是在塊中使用對象有什麼區別?我想你要定義的是dispatch_async(dispatch_get_main_queue(),^ {block(object);});'? – izzy