性能优化面试题.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
性能优化面试题 iOS 技术交流群: 638302184 在性能优化中一个最具参考价值的属性是FPS:Frames Per Second,其实就是屏幕刷新率,苹果的iphone 推荐的刷新率是60Hz,也就是说GPU每秒钟刷新屏幕60次,这每刷新一次就是一帧frame,FPS也就是每 秒钟刷新多少帧画面。静止不变的页面FPS值是0,这个值是没有参考意义的,只有当页面在执行动画或 者滑动的时候,FPS值才具有参考价值,FPS值的大小体现了页面的流畅程度高低,当低于45的时候卡顿 会比较明显。 图层混合: 每一个layer 是一个纹理,所有的纹理都以某种方式堆叠在彼此的顶部。对于屏幕上的每一个像素,GPU 需 要算出怎么混合这些纹理来得到像素RGB 的值。 当Sa = 0.5 时,RGB 值为(0.5, 0, 0),可以看出,当两个不是完全不透明的CALayer 覆盖在一起时,GPU 大量做 这种复合操作,随着这中操作的越多,GPU 越忙碌,性能肯定会受到影响。 公式: R = S + D * ( 1– Sa ) 结果的颜色是源色彩(顶端纹理)+ 目标颜色(低一层的纹理)*(1-源颜色的透明度)。 当Sa = 1 时,R = S,GPU 将不会做任何合成,而是简单从这个层拷贝,不需要考虑它下方的任何东西(因为都 被它遮挡住了),这节省了GPU 相当大的工作量。 一、入门级 1、用ARC 管理内存 2、在正确的地方使用 reuseIdentifier 3、尽量把views 设置为透明 4、避免过于庞大的XIB 5、不要阻塞主线程 6、在ImageViews 中调整图片大小。如果要在UIImageView 中显示一个来自bundle 的图片,你应保证图片 的大小和UIImageView 的大小相同。在运行中缩放图片是很耗费资源的,特别是UIImageView 嵌套在 UIScrollView 中的情况下。如果图片是从远端服务加载的你不能控制图片大小,比如在下载前调整到合适大 小的话,你可以在下载完成后,最好是用background thread,缩放一次,然后在UIImageView 中使用缩放后的图片。 7、选择正确的Collection。  Arrays: 有序的一组值。使用index 来lookup 很快,使用value lookup 很慢, 插入/删除很慢。  Dictionaries: 存储键值对。 用键来查找比较快。  Sets: 无序的一组值。用值来查找很快,插入/删除很快。 8、打开gzip 压缩。app 可能大量依赖于服务器资源,问题是我们的目标是移动设备,因此你就不能指望网 络状况有多好。减小文档的一个方式就是在服务端和你的app 中打开gzip。这对于文字这种能有更高压缩 率的数据来说会有更显著的效用。 iOS 已经在NSURLConnection 中默认支持了gzip 压缩,当然AFNetworking 这些基于它的框架亦然。 二、中级 1、重用和延迟加载(lazy load) Views  更多的view 意味着更多的渲染,也就是更多的CPU 和内存消耗,对于那种嵌套了很多view 在 UIScrollView 里边的app 更是如此。  这里我们用到的技巧就是模仿UITableView 和UICollectionView 的操作: 不要一次创建所有的subview, 而是当需要时才创建,当它们完成了使命,把他们放进一个可重用的队列中。这样的话你就只需要在 滚动发生时创建你的views,避免了不划算的内存分配。 2、Cache, Cache, 还是Cache!  一个极好的原则就是,缓存所需要的,也就是那些不大可能改变但是需要经常读取的东西。  我们能缓存些什么呢?一些选项是,远端服务器的响应,图片,甚至计算结果,比如UITableView 的 行高。  NSCache 和NSDictionary 类似,不同的是系统回收内存的时候它会自动删掉它的内容。 3、权衡渲染方法.性能能还是要bundle 保持合适的大小。 4、处理内存警告.移除对缓存,图片object 和其他一些可以重创建的objects 的strong references. 5、重用大开销对象 6、一些objects 的初始化很慢,比如NSDateFormatter 和NSCalendar。然而,你又不可避免地需要使用它们, 比如从JSON 或者XML 中解

文档评论(0)

159****5500 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档