我有有存儲地方,比如/var/mobile/Applications/.../.../uniqueIDforNSMO/Pictures/
負載大UIImages異步
我沒有問題,通過基於NSMO的UNIQUEID找到他們得到這些照片從磁盤圖片的NSManagedObject,我有一個DataController類,將拉他們對我來說,這是非常高效的。但是當我嘗試將這些圖片添加到視圖時,我遇到了問題,UI被阻止。我懷疑問題是這些圖像的分辨率非常高(它們是來自iPad相機膠捲的圖像)。
顯示5張圖片大約需要3秒,導致UI被阻止。甚至只顯示2張圖片可以阻止該死的用戶界面。以下是我在後臺線程中添加它們的方法:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
UIImage *image = [self.photos objectAtIndex:index];
dispatch_async(dispatch_get_main_queue(), ^{
cell.imageView.image = image;
});
});
如果我在不調度的情況下設置imageView.image,則需要更長的時間。
難道問題是圖像是如此之大,而單元格的imageView只有150x150?或者是因爲我最初只有一個圖像的參考,所以圖像的實現是緩慢的部分?
任何人都可以在這裏提出任何建議嗎?我已經嘗試調整圖像的大小,然後將它們返回到數組中,但這沒有幫助。
您是否嘗試在磁盤上存儲調整大小的150x150縮略圖並加載該圖像而不是整個圖像並將其縮小? – deanWombourne
我最終將需要全分辨率圖像,因爲它們能夠點擊單元格以查看完整圖像,但我認爲您有一個好點,我可以同時存儲這兩個圖像,但只能按需顯示全分辨率圖像。 – bpercevic
沒有運行的好處 - objectAtIndex:在全局隊列中。如果您懷疑圖像文件的大小,將這些文件加載到self.photos(NSArray,我猜?)會花費一些時間:I/O + JPEG解碼。這是在cellForRowAtIndexPath中完成的嗎? – Simon