1. 计算UITableViewCell高度问题####
问题一:做ios开发的都知道在不定高的table里计算UITableViewCell高度是个很蛋疼的时
解决: UITableViewCell里的元素到使用约束布局,根据约束来得到高度。就不用来自己计算高度了。
问题二:ios8跟ios7高度计算机制不同,ios7会缓存已经得到过的高度,ios8每次都会去计算一次高度。
解决:自己做一下高度的缓存咯。
问题三:在什么时候计算高度比较好呢?在滑动的时候再去计算高度,肯定也会消耗一些性能的。
解决:预缓存机制,利用RunLoop空闲时间执行预缓存任务。
这三个问题大神都解决了,原文链接
在一些不复杂的Cell可以用这种方法,可以加快开发效率,不用自己计算高度了。但是在一些复杂视图里,还是自己用frame去计算高度,并自己在后台线程里缓存比较好,因为autolayout本身比frame是更消耗资源的。
以下内容是对ibireme同学的iOS 保持界面流畅的技巧博文的学习。感谢大神的分享
2. CPU资源消耗优化####
- 对象创建
尽量用轻量的对象代替重量的对象,可以对性能有所优化。比如 CALayer 比 UIView 要轻量许多,那么不需要响应触摸事件的控件,用 CALayer 显示会更加合适。
- 对象调整
对象的调整也经常是消耗 CPU 资源的地方。当视图层次调整时,UIView、CALayer 之间会出现很多方法调用与通知,所以在优化性能时,应该尽量避免调整视图层次、添加和移除视图。
- 对象销毁
我之前一般都不会取销毁对象的,看来我错了,一些没用的资源还是要及时销毁的。
如果对象可以放到后台线程去释放,那就挪到后台线程去。这里有个小 Tip:把对象捕获到 block 中,然后扔到后台队列去随便发送个消息以避免编译器警告,就可以让对象在后台线程销毁了。
NSArray *tmp = self.array;
self.array = nil;
dispatch_async(queue, ^{
[tmp class];
});
- 布局计算
视图布局的计算是 App 中最为常见的消耗 CPU 资源的地方。如果能在后台线程提前计算好视图布局、并且对视图布局进行缓存(可以在model里算好宽高位置等,不要多次计算),那么这个地方基本就不会产生性能问题了。