NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:[getImage objectAtIndex:indexPath.row]]];
cell.imageView.image = [UIImage imageWithData:imageData];
我從服務器提取圖像並在UITableView
上顯示它們。我發現滾動非常緩慢。我如何刪除它?TableView滾動緩慢
NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:[getImage objectAtIndex:indexPath.row]]];
cell.imageView.image = [UIImage imageWithData:imageData];
我從服務器提取圖像並在UITableView
上顯示它們。我發現滾動非常緩慢。我如何刪除它?TableView滾動緩慢
當調用此代碼:
[[NSData alloc] initWithContentsOfURL:...]
這是伸手在網絡上獲取數據。這可能需要幾秒鐘(或更長時間),而您希望保持每秒60幀的繪圖。這意味着您的tableView:cellForRowAtIndexPath:
方法應該在1/60秒或16毫秒內執行,因此網絡呼叫是不可能的。
編寫此代碼的適當方式是異步加載數據(使用Grand Central Dispatch或其他機制),將其緩存在磁盤上或使用NSCache
,然後通知表視圖它應該重新加載以顯示新的可用數據。
如何使用GCD提高速度。 – 2014-10-17 05:15:29
邁克阿什的文章介紹大中央調度是一個很好的起點。如果您對如何使用它有任何疑問,您應該提出一個新問題。 https://www.mikeash.com/pyblog/friday-qa-2009-08-28-intro-to-grand-central-dispatch-part-i-basics-and-dispatch-queues.html – wjl 2014-10-17 16:11:35
即使對於最近顯示的單元格,該數據源方法也會被頻繁調用,因爲iOS希望減少tableview中的單元總數,因此它會銷燬不再可見的單元格,並要求重新創建tablview數據源方法當他們變得可見時。
如果您從服務器獲取每個細胞羣的電話,那麼它肯定會很慢(輕描淡寫)。
實施一些緩存並從緩存中填充您的內容。
[如何在每個單元格中加載圖像時如何提高表視圖中滾動的速度?](http://stackoverflow.com/questions/823475/how-to-increase-the-當圖像正在顯示時,在圖像上滾動的速度) – Fogmeister 2014-10-16 14:23:08