iOS应用性能优化备忘录

UITableView

  • 使用 tableView 的 dequeueReusableCellWithIdentifier 来重用 Cell,而不是使用 UITableViewCell 来新建 Cell
  • 当你的 Cell 里需加载网络图片的话,采用异步方式(如直接使用 SDWebImage ),而不是同步方式,且先放置默认图片,取得网络数据后更新,是比较好的方式
  • 如果你的单个 Cell 所需网络数据的请求时间过长,可以选择在 tableView 停止滑动之后再加载网络数据,可以利用 UIScrollViewDelegate 中的 scrollViewDidEndDragging 判定 deceleratefasle,以及 scrollViewDidEndDecelerating 方法,来获知 tableView 已停止滑动,你还可以在 scrollViewWillBeginDragging 函数中,添加代码来停止正在进行的数据加载
  • 尽量使用 rowHeightsectionFooterHeightsectionHeaderHeight 来设置固定的高,而不请求 delegate 方法,即便需要请求,也不要在代理方法内计算行高,提前缓存好
  • 减少 Subviews 的数量
  • 减少放置在 CellForRowAtIndexPath 方法内的操作

UIView

  • 尽量将不透明 View 的 Opaque 属性设置为 true,尤其是它们出现在了复杂动画或是 ScrollView 中的时候,我们通常可以对 tableView 中的 Cell 做如此设置

CALayer

  • 采用 cornerRadius 设置圆角时,如果数量过多,会大幅降低你应用的帧数,所需圆角比较多的情况下,预先生成圆角图片并缓存,使用时直接取出,是比较好的手段,但如果你一定要作死,作如下设置能在一定程度上起到挽救作用
self.layer.shouldRasterize = true
self.layer.rasterizationScale = UIScreen.mainScreen.scale

Queue

  • 所有 UIKit 相关操作都必须放在主线程中执行
  • 不要将耗时的操作(如获取网络数据)放在主线程,这会导致你的应用失去响应

CollectionType

  • Arrays 依据 index 进行查找时性能比较优秀,但如果需要依据 value 进行查找,以及需进行大量插入删除操作时,Sets 的性能要更好

Network

  • 当传输的网络数据过大时,采用 gzip 压缩方式可以在一定程度降低传输数据的大小,如果你不太了解 gzip,你可以读下 这篇文章
  • 尽量在服务器端与客户端使用相同的数据结构,在内存中操作数据使它们满足你的数据结构开销很大
  • JSON 相比较于 XML,优点在于解析快,更小更易于传输,但当你传输较大数据的时候,使用 SAX 解析 XML 时,可以做到边下载边解析,可极大的降低内存消耗

BackgroundImage

  • 如果你要使用小图平铺来创建背景图的话,采用 UIColorcolorWithPatternImage 的渲染速度会更快
self.view.backgroundColor = UIColor(patternImage: (UIImage(named: "background")!))

Data

  • 小规模的数据使用 NSUserDefults 存储是比较好的方式
  • 在性能上 SQLite 和 CoreData 相差不大,一般情况下建议使用 CoreData,但如果有特殊需求的话,SQLite 也是不错的选择

Launch

  • didFinishLaunching 里开始尽可能多的异步任务来使你的应用尽早得到展示数据
  • 如果你需要加载一个大图片而且只供一次性使用,采用imageWithContentsOfFile 来加载它比较好的选择,但如果图片需要多次重用,imageNamed 会将图片缓存,多次重用速度会快很多

Segue

  • 尽量不要在 viewWillAppear 中放置太多操作

End

虽然 80% 的性能优化都是不必要的,但是当你发现自己的应用存在明显性能问题的时候,逐条核对一下吧 :)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 16,509评论 4 61
  • 1.1 谈一谈GCD和NSOperation的区别? 首先二者都是多线程相关的概念,当然在使用中也是根据不同情境进...
    John_LS阅读 1,430评论 0 12
  • 站在暮色黄昏的高耸城墙,身后是猎猎的关中晚风,吹散了手中尚未来得及吸入的烟雾。云彩徐徐地吞落天边夕阳缓落的光,与水...
    谭笑生阅读 423评论 2 4
  • 一、奇迹 1、今天早上我们一起跳完高能量的...
    幸福花开奇迹汇阅读 348评论 0 3
  • 面对妈妈给我的爱,我总觉得尴尬。
    等哈哈儿阅读 199评论 0 0

友情链接更多精彩内容