前言
- 在大量加载列表数据的时候,每次都要做列表刷新,那么就会有卡顿的现象。
直接应用
#import "ViewController.h"
@interface ViewController : UIViewController
@end
#import "EOCNewsTableViewControllerNew.h"
@interface EOCNewsTableViewControllerNew ()
@property (nonatomic, assign) CFRunLoopObserverRef observer;
@property (nonatomic, strong) NSMutableArray *indexs;
@end
@implementation EOCNewsTableViewControllerNew
- (void)viewDidLoad {
[super viewDidLoad];
self.indexs = [NSMutableArray arrayWithCapacity:3];
__weak typeof(self) weakSelf = self;
self.observer = CFRunLoopObserverCreateWithHandler(CFAllocatorGetDefault(), kCFRunLoopBeforeWaiting, YES, 0, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) {
CFStringRef model = CFRunLoopCopyCurrentMode(CFRunLoopGetCurrent());
NSLog(@"%@",(__bridge NSString *) model);
CFRelease(model);
[weakSelf.indexs removeAllObjects];
NSArray *visibleCells = [weakSelf.tableView visibleCells];
for (UITableViewCell *cell in visibleCells) {
if (fabs([cell rowHeight] - cell.frame.size.height) > 0.1) {
[weakSelf.indexs addObject:[weakSelf.tableView indexPathForCell:cell]];
}
}
if (weakSelf.indexs.count > 0) {
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"update Row");
[weakSelf.tableView reloadRowsAtIndexPaths:weakSelf.indexs withRowAnimation:UITableViewRowAnimationFade];
});
}
});
CFRunLoopAddObserver(CFRunLoopGetMain(), self.observer, kCFRunLoopCommonModes);
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
CFRunLoopRemoveObserver(CFRunLoopGetMain(), self.observer, kCFRunLoopCommonModes);
}
@end