iOS面试题:对程序性能的优化你有什么建议?

  • 1.使用复用机制

  • 2.尽可能设置 View 为不透明

  • 3.避免臃肿的 XIB 文件

  • 4.不要阻塞主线程

  • 5.图片尺寸匹配 UIImageView

  • 6.选择合适的容器

  • 7.启用 GZIP 数据压缩

  • 8.View 的复用和懒加载机制

  • 9、缓存
    服务器的响应信息(response)。
    图片。
    计算值。比如:UITableView 的 row heights。

  • 10.关于图形绘制

  • 11.处理 Memory Warnings

  • 在 AppDelegate 中实现 - [AppDelegate applicationDidReceiveMemoryWarning:] 代理方法。
    在 UIViewController 中重载 didReceiveMemoryWarning 方法。
    监听 UIApplicationDidReceiveMemoryWarningNotification 通知。

  • 12.复用高开销的对象

  • 13.减少离屏渲染(设置圆角和阴影的时候可以选用绘制的方法)

  • 14.优化 UITableView
    通过正确的设置 reuseIdentifier 来重用 Cell。
    尽量减少不必要的透明 View。
    尽量避免渐变效果、图片拉伸和离屏渲染。
    当不同的行的高度不一样时,尽量缓存它们的高度值。
    如果 Cell 展示的内容来自网络,确保用异步加载的方式来获取数据,并且缓存服务器的 response。
    使用 shadowPath 来设置阴影效果。
    尽量减少 subview 的数量,对于 subview 较多并且样式多变的 Cell,可以考虑用异步绘制或重写 drawRect。
    尽量优化 - [UITableView tableView:cellForRowAtIndexPath:] 方法中的处理逻辑,如果确实要做一些处理,可以考虑做一次,缓存结果。
    选择合适的数据结构来承载数据,不同的数据结构对不同操作的开销是存在差异的。
    对于 rowHeight、sectionFooterHeight、sectionHeaderHeight 尽量使用常量。

  • 15.选择合适的数据存储方式
    在 iOS 中可以用来进行数据持有化的方案包括:
    NSUserDefaults。只适合用来存小数据。
    XML、JSON、Plist 等文件。JSON 和 XML 文件的差异在「选择正确的数据格式」已经说过了。
    使用 NSCoding 来存档。NSCoding 同样是对文件进行读写,所以它也会面临必须加载整个文件才能继续的问题。
    使用 SQLite 数据库。可以配合 FMDB 使用。数据的相对文件来说还是好处很多的,比如可以按需取数据、不用暴力查找等等。
    使用 CoreData。也是数据库技术,跟 SQLite 的性能差异比较小。但是 CoreData 是一个对象图谱模型,显得更面向对象;SQLite 就是常规的 DBMS。

  • 16.减少应用启动时间
    快速启动应用对于用户来说可以留下很好的印象。尤其是第一次使用时。
    保证应用快速启动的指导原则:
    尽量将启动过程中的处理分拆成各个异步处理流,比如:网络请求、数据库访问、数据解析等等。
    避免臃肿的 XIB 文件,因为它们会在你的主线程中进行加载。重申:Storyboard 没这个问题,放心使用。
    注意:在测试程序启动性能的时候,最好用与 Xcode 断开连接的设备进行测试。因为 watchdog 在使用 Xcode 进行调试的时候是不会启动的。

  • 17.使用 Autorelease Pool (内存释放池)

  • 18.imageNamed 和 imageWithContentsOfFile


更多:iOS面试题合集

你可能感兴趣的:(iOS面试题:对程序性能的优化你有什么建议?)