如此才能优化App性能 ?

App优化项目

一般针对项目优化的主要分为以下几个主要的方向:
1.移除项目中不需要的动态库。
2.移除不需要的类,合并一类功能类似的类及类的扩展(前提是不在对这些类做大的变动以及处理),并做响应的区分逻辑处理。
3.压缩资源图片,删除开发中不需要的资源图片。
4.优化applicationWillFinishLaunching,减少在启动的之间的这段时间做太多操作。

使用特殊的工具来进行无用类的筛选 fui (Find Unused Imports)

//安装 fui 工具 在终端中执行命令
sudo gem install fui -n /usr/local/bin

fui usage: https://github.com/dblock/fui

到工程目录下,执行 fui find 命令,可以找出所有的没有用到的class文件

防止离屏渲染
1.圆角

imageView.layer.cornerRadius=CGFloat(10);
imageView.layer.masksToBounds=YES;

优化方案1:使用贝塞尔曲线UIBezierPath和Core Graphics框架画出一个圆角

UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)]; 
imageView.image = [UIImage imageNamed:@"myImg"]; 
//开始对imageView进行画图 
UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, NO, 1.0); 
//使用贝塞尔曲线画出一个圆形图 
[[UIBezierPath bezierPathWithRoundedRect:imageView.bounds cornerRadius:imageView.frame.size.width/2.0] addClip];
[imageView drawRect:imageView.bounds];
imageView.image = UIGraphicsGetImageFromCurrentImageContext(); 
//结束画图 
UIGraphicsEndImageContext();
[self.view addSubview:imageView];

优化方案2:使用CAShapeLayer和UIBezierPath设置圆角

UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(100,100,100,100)];
imageView.image=[UIImage imageNamed:@"myImg"];
UIBezierPath *maskPath=[UIBezierPath bezierPathWithRoundedRect:imageView.bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:imageView.bounds.size];
CAShapeLayer *maskLayer=[[CAShapeLayer alloc]init];
//设置大小
maskLayer.frame=imageView.bounds;
//设置图形样子
maskLayer.path=maskPath.CGPath;
imageView.layer.mask=maskLayer;
[self.view addSubview:imageView];

UITableView的优化

1.cell高度优化
如果是固定的行高就直接设置rowHeight,不要去重写 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath因为每次调用cell的方法时都会触发此方法,因此没有直接设置rowHeight效率高。
如果是动态高度需要设置一下预估高度。满足下面三条:
* 使用Autolayout进行UI布局约束(要求cell.contentView的四条边都与内部元素有约束关系)。
* 指定TableView的estimatedRowHeight属性的默认值,就是初始化的一个默认高度。
* 指定TableView的rowHeight属性为UITableViewAutomaticDimension。
设置为:
self.myTableView.estimatedRowHeight = 44.0;
self.myTableView.rowHeight = UITableViewAutomaticDimension;
2.渲染
离屏渲染会付出很大的开销,能避免离屏渲染尽量就不要离屏渲染。
下面的情况或操作会引发离屏渲染:
* 设置透明(alpha)属性
* 为图层设置遮罩(layer.mask)
* 将图层的layer.masksToBounds / view.clipsToBounds属性设置为true
* 将图层layer.allowsGroupOpacity属性设置为YES和layer.opacity小于1.0
* 为图层设置阴影(layer.shadow *)。
* 为图层设置layer.shouldRasterize=true
* 具有layer.cornerRadius,layer.edgeAntialiasingMask,layer.allowsEdgeAntialiasing的图层
* 文本(任何种类,包括UILabel,CATextLayer,Core Text等)使用CGContext在drawRect :方法中绘制大部分情况下会导致离屏渲染,甚至仅仅是一个空的实现
3.减少视图的数目
4.减少多余的绘制操作
5.不要给cell动态添加subView
6.滑动时按照需要加载对应的内容
7.圆角的优化等等
其他一些优化建议:
* 当我们需要圆角效果时,可以使用一张中间透明图片蒙上去
* 使用ShadowPath指定layer阴影效果路径
* 使用异步进行layer渲染(Facebook开源的异步绘制框架AsyncDisplayKit)
* 设置layer的opaque值为YES,减少复杂图层合成(如果opaque设置NO,那么Alpha应该小于1)
* 尽量使用不包含透明(alpha)通道的图片资源
* 尽量设置layer的大小值为整形值
* 直接让美工把图片切成圆角进行显示,这是效率最高的一种方案
* 很多情况下用户上传图片进行显示,可以让服务端处理圆角
* 使用代码手动生成圆角Image设置到要显示的View上,利用UIBezierPath(CoreGraphics框架)画出来圆角图片

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_23091121/article/details/80334228
个人分类: iOS开发
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭