合完代码后,编译安装包到手机上装发现卡顿比较严重,今天做了一点优化。
-
优化引发 crash 问题
数组是 mutable 的,不表示数组元素是 mutable 的,可以手动使用 mutableCopy 生成一份 mutable 的数据,进行操作。(今天遇到的 crash 的原因)。
添加简单的缓存
左侧 Tab 来回切换数据都是重复的,可以将右侧的数据添加缓存
if ([BARS_CACHE objectForKey:selectedCateid]) {
NSLog(@"命中");
bars = [BARS_CACHE objectForKey:selectedCateid];
} else {
bars = [[[self fetchLocalJSON:[NSString stringWithFormat:@"get_bar_list_by_category- copy %@", selectedCateid]] objectForKey:@"result"] objectForKey:@"bars"];
// 添加缓存
[BARS_CACHE setObject:bars forKey:selectedCateid];
}
同样,图片也添加缓存,避免二次渲染(这个卡顿很明显)
// 刷新图片
NSURL *imageURL = [NSURL URLWithString:[_bar objectForKey:@"pic"]];
UIImage *image;
if ([IMGS_CACHE objectForKey:imageURL]) {
NSLog(@"命中缓存");
image = [IMGS_CACHE objectForKey:imageURL];
} else {
NSLog(@"未命中缓存");
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
image = [UIImage imageWithData:imageData];
[IMGS_CACHE setObject:image forKey:imageURL];
}
[_imageView setImage:image];
这么改后重新运行能明显感觉到更加流畅了。