0
現在我分派方法內部的代碼塊使用以下格式去下載的東西對我來說:在線塊定義 - 如何?
dispatch_queue_t downloader("downloader", NULL);
dispatch_async (downloader, ^{
//do stuff
});
什麼,我想現在要做的就是有塊返回一個UIImage對我來說,這是我然後可以使用該方法的回報:
-(UIImage *) myMethod:
dispatch_queue_t downloader("downloader", NULL);
dispatch_async (downloader, ^{
//do stuff to get UIImage
dispatch_async (dispatch_get_main_queue, ^{
return UIImage; //this is the image that image I want myMethod to return
});
});
我怎麼會傳遞參數到不兼容的類型錯誤。我意識到這是因爲我沒有聲明塊有返回值。
我該如何聲明塊在dispatch_async中返回一個UIImage?這甚至有可能,或者是否該方法已經在塊完成執行之前完成?
這是發生了什麼:'會的方法已經由時間來完成塊完成執行# –
在中期,異步方法永遠不能返回任何東西。由於您在線程中執行的代碼不會在主線程中運行,但所有其他代碼都在主線程中運行並且從上到下按順序執行,因此您將無法從異步調用中返回任何內容,例如此類。使用dispatch_sync返回或創建您自己的塊並在某些任務完成後作爲參數傳遞以執行。 – Sandeep