標籤:
經常我們會用tableView顯示很多條目, 有時候需要顯示圖片, 但是一次從伺服器上取來所有圖片對使用者來浪費流量, 對伺服器也是負擔.最好是按需載入,即當該使用者要瀏覽該條目時再去載入它的圖片。
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { UIImage *image = [self getImageForCellAtIndexPath:indexPath]; //從網上取得圖片 [cell.imageView setImage:image]; }
這雖然解決了延時載入的問題, 但當網速很慢, 或者圖片很大時(假設,雖然一般cell中的圖很小),你會發現程式可能會失去對使用者的響應.
原因是
UIImage *image = [self getImageForCellAtIndexPath:indexPath];
這個方法可能要花費大量的時間,主線程要處理這個method.
所以失去了對使用者的響應.
所以需要做如下改寫:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { [self performSelectorInBackground:@selector(updateImageForCellAtIndexPath:) ]; } - (void)updateImageForCellAtIndexPath:(NSIndexPath *)indexPath { @autoReleasePool{ UIImage *image = [self getImageForCellAtIndexPath:indexPath]; UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; [cell.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO]; } }
IOS開發中如何解決TableView中圖片延時載入