ios 性能优化策略
1、尽量不用动态高度
2、如果是动态高度的话,提前计算好即将展示的高度并使用 一定规则跟对应的对象进行绑定缓存起来以便下一次使用
3、不要在layoutSubViews 方法中对UI elements进行赋值,设置样式等,layoutSubViews这个方法可能会因为某个内容的变化而重新被调用一遍,
这样一来会有很多次的计算或者是重绘
4、在tableView Cell 中添加subView时用content.view.addSubView方法,如果时直接addSubView可能会多次 调用layoutSubViews这个方法。
5、减少主线程offscreenRendering的操作
a、合理利用layer的shouldRasterize属性(这个属性是将页面的静态内容缓存起来,如果页面元素是动态的,缓存的结果没有多大作用反而会造成资源的开销)
b、使用圆角图片代替设置layer的cornerRadius,设置layer的cornerRadius也是一种offScreen rendering的操作
c、设置阴影,使用[myView.layer setShadowPath:[[UIBezierPath bezierPathWithRect:myView.bounds] CGPath]];比[myView.layer setShadowOpacity:0.5]的效率高
d、减少layer的mask
e、视图尽可能设置为不透明以减少视图间的blending
f、抗锯齿layer.edgeAntialiasingMask, layer.allowsEdgeAntialiasing
6、shell cell & realCell:在快速滚动的时候没必要把realCell返回,这时候只要返回一个shell cell,当tableView滚动速率降低到一定程度的时候再返回你要显示的realCell
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{CGPoint velocity = [tableView.panGestureRecognizer velocityInView:self.view]; self.velocity = velocity;
}
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath { if(fabs(self.velocity.y) > 2000)
{
//return shell cell }else{//return real cell
} }
6、对于一些复杂的视图在drawRect:方法中直接将视图绘出来的效果比往一个容器中不停地添加label,imageView来得更加的高效( 内存开销大,花费时间更多)
7、不要在主线程中处理那些没有显示在页面中的UI的数据,比如在tableView滚动的时候做分页判断,显示第一在滚动的过程中用其他线程将即将要显示的数据处理好,而不是在显示的时候处理
8、显示的图片大小尽量和ImageView的大小一致,减少图片为了因大小不一致而导致的处理过程。
9、尽可能减小UI布局的深度,使用flat layout可以使元素间的blending减少

10、合理选择数据库缓存方式:简单的数据缓存不要使用关系型数据库
11、减少相同数据的重复处理
12、重用开销大的对象(如NSPredicate,NSDateFormatter,NSRegressExpression)
13、使用:Autolayout的使用看视图而定,subview少的视图
用autolayout比较划算,Subview多的视图用autolayout的开销会比较大
(setframe是最快的,其次是元素依赖自身的layout,再其次是依赖父视图)

UIWebView
1、尽量重用webView中的对象
2、减少webView实例对象在工程中的数量(用一个webView对象然后每次加载过对应显示的内容)
3、优先用loadHTMLString:baseURL: 然后才是loadRequest: 来加载一个网页
实现webView:didFailLoadWithError:ofthedelegate这个方法使webView能够及时的关闭对某个错误的跟踪,同时可以对webView的出现的错误进行处理达到更好的体验
应用打开的速度
Tip1:减少应用启动时的预加载项
A、减少类方法的数量
类方法需要在应用启动时进行加载
B、减少Xib,Stroyboard的数量
C、减少开机启动时非必要的网络加载(尽可能的轻)
Ios8使用webKit,webKit的比UIWebView有更好的体验
内存优化:
1、减少类型转换,尽量用定义的类型来匹配
如 –(int)getValue; int a=getValue 比long a=getValue占用的内存更少,
枚举类型赋值时尽量如果变量定义是用一个整形来存取枚举值
2、对象在内存中存在的时间越久越容易造成内存泄漏,全局变量,单例
耗电:
定时器
定位
Io 读写
视频播放
总结:多缓存,少计算,少转换。
ios 性能优化策略的更多相关文章
- iOS性能优化:Instruments使用实战
iOS性能优化:Instruments使用实战 最近采用Instruments 来分析整个应用程序的性能.发现很多有意思的点,以及性能优化和一些分析性能消耗的技巧,小结如下. Instrument ...
- 【腾讯Bugly干货分享】微信读书iOS性能优化
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/578c93ca9644bd524bfcabe8 “8小时内拼工作,8小时外拼成长 ...
- IOS 性能优化的建议和技巧
IOS 性能优化的建议和技巧 本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelo ...
- 常见性能优化策略的总结 good
阅读目录 代码 数据库 缓存 异步 NoSQL JVM调优 多线程与分布式 度量系统(监控.报警.服务依赖管理) 案例一:商家与控制区关系的刷新job 案例二:POI缓存设计与实现 案例三:业务运营后 ...
- 90 % Java 程序员被误导的一个性能优化策略
我们经常看到一些 Java 性能优化的书或者理念,说不要在循环内定义变量,这样会占用过多的内存影响性能,而要在循环外面定义.接触 Java 这么久以来,相信很多 Java 程序员都被这种代码性能优化策 ...
- iOS性能优化总结
iOS性能优化总结.关于 iOS 性能优化梳理: 基本工具.业务优化.内存优化.卡顿优化.布局优化.电量优化. 安装包瘦身.启动优化.网络优化等. 关于iOS 性能优化梳理: 基本工具.业务优化.内存 ...
- 在 Android开发中,性能优化策略十分重要
在 Android开发中,性能优化策略十分重要本文主要讲解性能优化中的布局优化,希望你们会喜欢.目录 示意图 1. 影响的性能 布局性能的好坏 主要影响 :Android应用中的页面显示速度 2. 如 ...
- c++ 性能优化策略
c++ 性能优化策略 作者:D_Guco 来源:CSDN 原文:https://blog.csdn.net/D_Guco/article/details/75729259 1 关于继承:不可否认良好的 ...
- iOS 性能优化收集
iOS 性能调试 instrument Instrument Instrument之Core Animation工具 避免图层混合 ①.确保控件的opaque属性设置为true,确保backgroun ...
随机推荐
- Android之Socket通信、List加载更多、Spinner下拉列表
Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务 ...
- Android图片缓存之初识Glide
前言: 前面总结学习了图片的使用以及Lru算法,今天来学习一下比较优秀的图片缓存开源框架.技术本身就要不断的更迭,从最初的自己使用SoftReference实现自己的图片缓存,到后来做电商项目自己的实 ...
- 教你如何塑造JavaScript牛逼形象
如何写JavaScript才能逼格更高呢?怎样才能组织JavaScript才能让别人一眼看出你不简单呢?是否很期待别人在看完你的代码之后感叹一句“原来还可以这样写”呢?下面列出一些在JavaScrip ...
- ASP.NET sync over async(异步中同步,什么鬼?)
async/await 是我们在 ASP.NET 应用程序中,写异步代码最常用的两个关键字,使用它俩,我们不需要考虑太多背后的东西,比如异步的原理等等,如果你的 ASP.NET 应用程序是异步到底的, ...
- EntityFramework 7 Join Count LongCount 奇怪问题(已修复)
问题说明: 博客问题纪录 Use EF7, Linq Join Count is error EF7 Code Commit EF7 版本(注意 rc): 旧版本:"EntityFramew ...
- Selenium3.0 自动化测试
早在2013年的时候,Selenium官方宣布,Selenium新的版本会在圣诞节的时候发布.但是,他们并没有说哪一个圣诞节发布. 转眼的三年过去了,目前已经发布到Selenium3.0 beta4版 ...
- 测试驱动开发与Python
最近在看一本书<Test-Driven Development with Python>,里面非常详细的介绍了如何一步一步通过测试驱动开发(TDD)的方式开发Web项目.刚好这本书中使用了 ...
- C#程序开发中经常遇到的10条实用的代码
1 读取操作系统和CLR的版本 OperatingSystem os = System.Environment.OSVersion; Console.WriteLine("Platform: ...
- ubuntu 解决 “E: Problem with MergeList /var/lib/apt/lists/”错误
这种错误的意思:无法解析或打开软件包的列表或是状态文件. 出现的原因:无法解析或打开软件包列表多数情况是安装的软件与本身系统有一些冲突之类的问题,或者曾在更新软件源或下载软件的时候意外中断造成的. 解 ...
- EF是啥?【What is Entity Framework?】(EF基础系列2)
EF产生的背景: 编写ADO.NET访问数据的代码,是沉闷而枯燥的,所以微软提供了一个对象关系映射框架(我们称之为EF),通过EF可以自动帮助我们的程序自动生成相关数据库. Writing and m ...