2015-05-18 98 views
0

我的iPhone應用程序使用一些圖像作爲完整的背景。它已經從JSon下載圖像並在運行應用程序時顯示它們。我用這個代碼:慢性能Json圖像分辨率

dispatch_async(dispatch_get_global_queue(0,0), ^{ 
     NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString: newIndex[@"imageInside1"]]]; 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      cell.thumbImage.image = [UIImage imageWithData:imageData]; 
     }); 
    }); 

但是,當我運行的應用程序,它需要太長的時間來顯示圖像。我認爲是因爲圖像的分辨率(當它從互聯網下載並顯示到應用程序中時)。所有這些都是1242x2208.jpg(與iPhone 6 Plus的尺寸相同),因爲我想保證所有尺寸背景的正確分辨率。我正在做正確的過程嗎?還有另一種方法可以讓它更快嗎?是否有必要把它們放到1242x2208尺寸?對我的情況,jpg是更快的文件類型?

我的應用程序是一個tableview與不同項目。當用戶單擊其中一個單元格時,它必須在頁面視圖控制器和頁面控件內部顯示三個完整大小的背景圖像(如教程ViewControllers)。我不知道爲什麼,但第一張圖片從未出現過。我必須滑動Page Control才能顯示第二個,然後返回第一個。在這第二次機會中,第一張圖片出現了。

感謝您的幫助¡

+0

的下載這是什麼都用JSON做??? –

+0

使用上面的代碼從{「imageInside1」:「www.example.com/img.jpg」}下載圖像。我不知道這是否是正確的方法。我不知道爲什麼太慢......是否與Json有關? – XCode4S

+0

與JSON無關 - 這只是信息結構化的方式。如果XML有' info',那麼JSON中的相同就是'{「tag」:「info」}(基本上)。它與下載圖像需要多長時間有很小的關係。 – Stonz2

回答

1

它,因爲你是異步分配的UIImageView,所有的用戶界面的變化必須同步發生在主線程中爲他們正確地執行,改變你的第二個異步方法只是簡單的同步,它應該做工

dispatch_sync(dispatch_get_main_queue(), ^{ 
     cell.thumbImage.image = [UIImage imageWithData:imageData]; 
    }); 

但比有更快的互聯網連接等,你不能真正加快圖像

+0

感謝@Fonix的回答。我嘗試了你的建議,不幸的是,它不起作用。它仍然很慢。你有另一個想法讓它更快嗎? – XCode4S

+0

要麼使圖像更小,所以他們下載更快,或獲得更快的互聯網連接嘿,沒有太多你可以害怕。如果你事先知道這些圖像是什麼,可能在你真正需要它們之前開始下載它們? – Fonix