在我的應用程序中,我使用滾動視圖來顯示300圖像(400 kB)。 需要將近2分鐘,因此,當我上下滾動時,它不光滑。ScrollView太慢 - 內存管理問題?
我該如何解決這個問題?
注意:我已經注意到,在向下滾動到scrollview結束一次後,它變得平滑。 滾動問題只出現在第一次。
在我的應用程序中,我使用滾動視圖來顯示300圖像(400 kB)。 需要將近2分鐘,因此,當我上下滾動時,它不光滑。ScrollView太慢 - 內存管理問題?
我該如何解決這個問題?
注意:我已經注意到,在向下滾動到scrollview結束一次後,它變得平滑。 滾動問題只出現在第一次。
嘗試在你的負載功能加入這個(您加載圖片)。如果您正在使用while或for循環加載圖像,請將此代碼添加到循環中。
NSURL *url=//here url for your image
dispatch_queue_t currentQueue = dispatch_get_current_queue();
dispatch_queue_t dataConvertorQueue = dispatch_queue_create("Fetching images", NULL);
dispatch_async(dataConvertorQueue, ^{
NSData *data = [NSData dataWithContentsOfURL:url];
dispatch_async(currentQueue, ^{
//replace imageView with your imageView outlet
imageView.image = [[UIImage alloc] initWithData:data]];
});
});
dispatch_release(dataConvertorQueue);
此代碼可以幫助您從url中獲取並顯示圖像,並且它可以很好地與tableview一起使用。它可能不是你想要的,但它會給你一個關於如何去做的想法。希望它能幫助你。
請勿預先加載所有圖像。只需加載圖像以顯示此刻和下一張+最後一張照片。
據我瞭解,當加載/顯示滾動視圖時加載所有圖像。既然你有很多的圖像,它會更快,更節省內存,如果你只是加載/內存三張圖像。 這將是上一個/左側顯示的圖像,不可見 - 當前顯示的可見圖像和不可見的下一個/右側圖像。
因此,如果您移動/向左滑動,則基本上將滾動視圖向左移動並顯示已加載的右側圖像。在後臺您將加載下一個正確的圖像,而您將釋放最左側的圖像。
在任何時候,你只有最多4張圖片加載。
查看WWDC 2011的無限scrollview示例 - 會話104高級滾動視圖以獲取良好的視覺示例和示例代碼。
你能解釋一下嗎?我愛慕理解得很好。 – yatanadam 2012-04-17 09:03:09
我認爲this將解決您的問題。這個問題可能給你一些背景:
How to reuse/recycle custom element like uitableviewcell does?
你的問題與內存管理有什麼關係?你有沒有嘗試分析應用程序? – trojanfoe 2012-04-17 08:57:05