iOS-Core-Animation-Advanced-Techniques
sunnyxx优化UITableViewCell高度计算的那些事
iOS-Main -关于Instruments-Leaks工具的归纳总结
Xcode里的Instruments工具:Leaks、Allocations、Time Profiler、Automation
1.影响界面流畅性的关键点
- 网络请求,大部分网络请求都应该使用后台线程完成,如果你使用的是 AFNetworking、 SDWebImage 这些开源缓存库,那么切换到后台去请求网络资源的操作都已经默认完成。
- 本地数据读写和计算,当你需要从闪存中读取文件的时候,这些操作都应该使用GCD或者NSThread切换至后台线程中完成。
- 图像的处理,尽量使用合适的UIImage给予UIImageView使用,何谓合适?已经提前剪裁、缩放好的图片是最佳的,否则当UIImage赋予UIImageView.image的时候,iOS会有不必要的计算开销,而这些开销却是可以提前手动缓存起来的。
- Layer 属性的谨慎选择,不合理的 Layer 特效(阴影、圆角)都会使流畅的滑动变成卡顿(非常重要)。
- 少用 UIView.backgroundColor = UIColor.clearColor(),透明的背景会加剧卡顿。
- 文字的渲染,你可能不知道,文字的渲染也是需要开销的。一般来说,文字渲染的开销非常小,甚至不能察觉到。但是,当一个UILabel被赋予大段富文本文字后,开销就会非常大。
- 图像的渲染,一个任何开发者、几乎所有库(包括SDWebImage)都无法解决的问题,图像在UIImageView中的渲染开销,并且图像的渲染只能在主线程中执行。
2.APP启动时间计算方法
CFAbsoluteTime StartTime;
int main(int argc, char * argv[]) {
@autoreleasepool {
StartTime = CFAbsoluteTimeGetCurrent();
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
extern CFAbsoluteTime StartTime;
...
// 在 applicationDidFinishLaunching:withOptions: 方法的最后统计
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Launched in %f sec", CFAbsoluteTimeGetCurrent() - StartTime);