zoukankan      html  css  js  c++  java
  • iOS 性能优化

      基础优化:

      1、使用 ARC 管理内存:

      2、在正确的地方使用 reuserIdentifier

      3、尽量把 View 设置成透明

      4、避免过于庞大的 XIB

      5、不要阻塞主线程

      6、在 ImageView 中调整图片的大小。如果要在 UIImageView 中显示一个来自 bundle 的图片,需要保证图片的大小和 UIImageView 的大小相同。在运行中缩放图片是很耗费资源的,特别是 UIImageView 嵌套在 UIScrollView 的情况下。如果图片是远程下载的,可以在下载后使用 background thread 缩放一次,然后在 UIImageView 中使用 缩放的图片。

      7、选择正确的 Collection。

        Array:使用 Index 查询较快,使用 Value 查询比较慢,插入和删除比较慢;

        Dictionary:存储键值对,用键查找比较快。

        Sets:无序的一对,用值查找很快,插入删除很快;

      8、打开 gzip 压缩。APP 可能大量依赖于服务器资源,减少传输资源进行压缩。

      

      中级优化:

      1、重用和延迟加载:

        更多的 View 意味着更多的渲染,更多额 CUP 和内存消耗,对应嵌套在 UIScrollView 中的视图更是如此。

        不要一次创建所有的 VIew,而是当用到时才去创建,当他们完成使命后,放进可重用的队列。

      2、Cache:

        缓存原则:缓存所需要的,就是那些不太可能改变的但是需要经常读取的。

        缓存内容:服务端的响应,图片、 UITableView 的高度,甚至是计算结果。

        NSCache 和 NSDictionary 类似,不同的是系统回收内存的时候它会自动删掉它的内容。

      3、权衡渲染方法:

        性能还是要 bundle 保持合适的大小。

      4、处理内存警告:

        移除对缓存、图片对象或其他可以重建的对象的强引用。

      5、重用大开销对象:

      6、一些对象初始化很慢,如 NSDateFormat、NSCalendar,需要重用他们,可以通过添加属性到类里或创建静态变量来实现。

      7、避免反复处理数据:

        在服务端和客户端使用相同的数据结构很重要。

      8、选择正确的数据交换格式:

        JSON 解析比 XML 更快,更便于传输。

        使用 SAX 解析 XML 文件,就像解析本地文件一样,不需要像 JSON 一样把所有文档都下载后再开始解析,当有很大量数据时,使用 XML 解析能极大地降低内存消耗和增加性能。

      9、正确设定背景图片:

        全屏背景图:在View上添加一个 UIImageView 作为子 View。

        只是小的背景图,可以使用 UIColor 来绘制,它能更快的渲染也不会消耗性能。

      10、减少使用 Web 特性:

        在 Web 中减少 JavaScript 的使用,避免使用过大的框架。能只用原生 JS 更好;

        尽可能的异步加载。

      11、Shadow path:

        Core Animation 不得不先在后台得出你的图形并加好阴影后才去渲染,开销很大,使用 ShadowPath 避免这个问题,不必每次都计算如何渲染,它使用一个预先计算好的路径。

      12、UITableView 优化:

        1> 正确使用 reuseIdentifer 来重写 cell;

        2> 尽量使所有的 View 不透明,包括 Cell 本身;

        3> 避免渐变,图片缩放;

        4> 缓存行高;

        5> 如果 Cell 内实现的内容来自 web,使用异步加载,缓存请求结果;

        6> 使用 ShadowPath 来画阴影;

        7> 减少 subviews 的数量;

        8> 尽量不适用 cellForRowAtIndexPath: 如果需要用到,只用一次缓存结果;

        9> 使用正确的数据结构来存储数据;

        10> 使用 RowHeight、SectionFooterHeight、SectionHeaderHeight 来设置固定的高度,尽量不使用 delegate;

      13、UIImage 加载图片性能问题:

        imageNamed 初始化;默认加载图片后会在内存中缓存图片。这个方法用特定的名字在系统缓存中查找并返回一个图片对象,如果缓存中没有找到相应的图片,则从制定的地方加载图片并缓存对象,并返回这个图片对象。

        imageWithContentsOfFile 初始化 只加载图片不做缓存。加载一张大图且只是用一次时使用。这样 CPU 不需要做缓存而节省时间。

      14、 选择正确的数据存储类型:

        NSUserDefault 存储小数据;

        使用 SQLite 或 CoreData

        FMDB。

      高级优化:

      1、加速启动时间:

        尽可能的使用异步任务,比如加载服务端或数据库数据;

        避免使用庞大的 XIB;

      2、使用 AutoReleasePool:

        NSAutoReleasePool负责释放 block 中的 autoRelease 对象,一般情况下会自动被 UIKit 调用,但有些情况需要手动创建。如果手动创建很多临时对象,会发现内存一直在减小,直到对象被 Release 的时候。因为 UIKit 用光了 autoreleasepool 时内存才会被释放。

        可以在自己的 AutoReleasepool 中创建临时对象类避免这个问题。

      3、选择是否缓存图片:

        imageNamed

        imageWithContentsOfFile 

      4、避免日期格式转换:

        控制处理的时间格式,尽量选择 Unix 时间戳,可以很方便的从时间戳获得 NSDate。

      5、不要在 ViewWillAppear 中做过多耗时操作。

  • 相关阅读:
    OpenStack 中的neutron-server启动过程
    NYOJ 284 坦克大战 【BFS】+【优先队列】
    HDSF主要节点解说(二)工作原理
    SQL SERVER中的流程控制语句
    Android 自己定义View (二) 进阶
    JNI学习积累之一 ---- 常用函数大全
    Android NDK开发之Jni的数据类型
    CMakeListx.txt 编辑语法学习
    用CMake代替makefile进行跨平台交叉编译
    Android 开发--CMakeList调用本地so文件
  • 原文地址:https://www.cnblogs.com/ZachRobin/p/7460430.html
Copyright © 2011-2022 走看看