11-Performance [中文版] 斯坦福 iPhone开发课件.pdfVIP

11-Performance [中文版] 斯坦福 iPhone开发课件.pdf

  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文档。上传文档
查看更多
11-Performance [中文版] 斯坦福 iPhone开发课件

CS193P - 讲座11 iPhone应用程序开发 性能 公告 • Presence 2 明天截止(10月29日) • 注册的学生可以在课后来拿一个 iPod Touch • Presence 3 作业在星期四布置 今天的主题 • 内存使用 泄漏 自动释放 系统警告 • 并行 线程 操作和队列 • 绘画优化 iPhone 性能概述 • iPhone 应用程序必须工作于... 有限的内存 缓慢或者不可用的网络资源 不那么强大的硬件 • 写代码时铭记这些限制条件 • 使用性能工具来找出需要研究的地方 内存使用 iPhone上的内存 • 性能的起点 需要时才载入 不要泄漏 注意你的自动释放的使用 重复使用内存 • 最后才求救于系统内存警告 响应警告或者被关闭 需要时才载入 • Cocoa框架里很普遍 • 仅做必需的事情 应用程序启动时! • 考虑你的代码应该属于哪一块 • 使用多个NIBs对应你的用户界面 过早载入一个资源 • 如果它很晚才被用到?或者根本没被用上? - (id)init { self = [super init]; if (self) { // 太早... myImage = [self readSomeHugeImageFromDisk]; } return self; } 需要时才载入一个资源 • 等到什么地方真正需要它时,才生成它 - (UIImage *)myImage { if (myImage == nil) { myImage = [self readSomeHugeImageFromDisk]; } } • 结果是对内存管理和启动时间都有利 • 也不是永远正确,根据你的特殊情况考虑 • 注意上面的代码对线程是不安全的! 阻止泄漏 • 内存泄漏后果严重 尤其是经常运行的代码 • 幸运的是,使用正确的工具很容易找到泄漏的地方 方法的命名和对象的归属关系 • 如果一个方法的名字含有alloc, copy或者new, 那么它返回一个retain了的对象 • 或者retain的调用 过早的return会使这个挺难做到! 找出泄漏 • 使用Instrument记录泄漏 在Instrument里识别泄漏 • 每个泄漏伴有一个追踪轨迹 • 系统代码里确实存在泄漏,但是极少 如果你发现一个,请告知 • 首先还是考虑你自己的代码 执行中抓取 演示: Autorelease 和你 • Autorelease 简化你的代码 可以少些对对象存活的范围和时间的担心 • 当一个autorelease 池弹出,它对里面的每一个对象调用 -release • 你的应用程序的运行循环每执行一次会生成一个 autorelease 池 那么可能会有什么问题? • 如果在这个内存池弹出前,许多对象已经自动释放了这么办? • 考虑你的应用程序使用的最大内存 一个拥挤的池... 将你的最高水位标记减低 • 当许多对象要自动释放,建立和释放你自己的内存池 通常不需要这么做,未经深思不要这么做! 工具可以用来帮助识别需要这么做的地方 Loops 是经典的例子 一个Loop里的Autorelease • 记得吗,很多方法返回自动释放的对象 for (int i = 0; i someLargeNumber; i++) { NSString *string = ...; string = [string lowercaseString]; string = [string stringByAppendingString:...]; NSLog(@“%@”, string); } 生成一个Autorelease 池 • 一个选择是每次循环都生成和释放

文档评论(0)

skvdnd51 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档