在後臺加載UIImageView
對象是否安全,並且完成後,將它們插入主線程的視圖層次結構中?如何在後臺加載UIImageView對象?
例如,您創建一個GCD塊,它在後臺加載10個圖像視圖。最後你有異步模塊它增加了所有UIImageViews
來查看層次結構。
我聽說如果您創建了UIImage
並將其添加到UIImageView
,那麼當UIImageView
需要時,會根據需要加載圖像數據。我將如何強制在後臺拖動UIImage
數據,以防止長時間加載時阻塞主線程?
在後臺加載UIImageView
對象是否安全,並且完成後,將它們插入主線程的視圖層次結構中?如何在後臺加載UIImageView對象?
例如,您創建一個GCD塊,它在後臺加載10個圖像視圖。最後你有異步模塊它增加了所有UIImageViews
來查看層次結構。
我聽說如果您創建了UIImage
並將其添加到UIImageView
,那麼當UIImageView
需要時,會根據需要加載圖像數據。我將如何強制在後臺拖動UIImage
數據,以防止長時間加載時阻塞主線程?
如果你從服務器上下載圖片,你可以在單獨的線程下載它們,這樣不會阻塞你的用戶界面。一旦圖像下載完成,您可以將其設置爲主線程的特定圖像視圖。
__weak typeof(self) weakSelf = self;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^(void) {
NSData *imageData= [NSData dataWithContentsOfURL:Image_URL];
UIImage *image = [UIImage imageWithData:imageData];
dispatch_sync(dispatch_get_main_queue(), ^(void) {
__strong __typeof__(weakSelf) strongSelf = weakSelf;
strongSelf.someImageView.image = image;
;
});
});
注: 如果您正在使用AFNetworking
,您可以使用UIImageView
類別,它會在後臺韓德爾加載圖像,也可以緩存,所以如果你想再次下載它會帶來從圖像緩存。
是否有必要在GCD塊中使用__weak self? – johnMa
概念是我們沒有創造任何保留週期。當block被創建時,它將捕獲它的環境,意味着將爲其中使用的每個對象創建一個強引用。所以有機會獲得retian循環,這就是爲什麼我們使用weakself。還有一種可能性,如果我們處於封閉狀態,並且沒有其他參考依然存在,那麼我們的弱自我就沒有了,因爲我們在這一塊區域創造了堅強的自我。在使用之前我們也應該檢查零。 –
你在下載這些照片嗎?他們已經在磁盤上?你看到一些性能問題(具體)? – Wain
嘗試[Asyncronous image view](https://github.com/nicklockwood/AsyncImageView)而不是'uiimageView'。 –