今天在review程式碼的時候發現之前的tableview 和 collectview 的分頁載入邏輯還有優化的餘地,於是進行了優化。
一、tableview的分頁載入的程式碼對比
沒有優化之前的程式碼如下:
[strongSelf.tableView.mj_footer endRefreshing];
[strongSelf.articleArr addObjectsFromArray:feedList];
[strongSelf.tableView reloadData];
優化之後的程式碼如下:
NSMutableArray *indexPaths = [NSMutableArray array];
[feedList enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:(strongSelf.articleArr.count + idx) inSection:0];
[indexPaths addObject:indexPath];
}];
[strongSelf.tableView.mj_footer endRefreshing];
[strongSelf.articleArr addObjectsFromArray:feedList];
[strongSelf.tableView beginUpdates];
[strongSelf.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];
[strongSelf.tableView endUpdates];
二、collectonview的分頁載入的程式碼對比
沒有優化之前的程式碼如下:
[strongSelf.feedList addObjectsFromArray:feedList];
if (feedList.count < kPageSize) {
[strongSelf.collectionView.mj_footer endRefreshingWithNoMoreData];
}else{
[strongSelf.collectionView.mj_footer resetNoMoreData];
}
[strongSelf.collectionView reloadData];
優化之後的程式碼如下:
NSMutableArray *indexPaths = [NSMutableArray array];
[feedList enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
[indexPaths addObject:[NSIndexPath indexPathForItem:(strongSelf.feedList.count + idx) inSection:0]];
}];
[strongSelf.feedList addObjectsFromArray:feedList];
if (feedList.count < kPageSize) {
[strongSelf.collectionView.mj_footer endRefreshingWithNoMoreData];
}else{
[strongSelf.collectionView.mj_footer resetNoMoreData];
}
[strongSelf.collectionView insertItemsAtIndexPaths:indexPaths];
總結:相比較之下,優化之後看似程式碼量增加了少許,但是從理論上分頁載入的效能更好了。之前分頁載入使用的全域性重新整理,優化之後改用了區域性重新整理。從而效能得到提升。
-END-