深入剖析 iOS 性能优化.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
深入剖析 iOS 性能优化;什么影响性能? 如何检测?;时间复杂度;数组;Dictionary 和 Set;containsObject 不同实现;containsObject in 数组;containsObject in Set;GCD;通过 dispatch_block_create_with_qos_class 方法指定队列的 QoS 为 QOS_CLASS_UTILITY(= iOS 8)。这个 QoS 系统会针对大的计算,I/O,网络以及复杂数据处理做电量优化。;线程爆炸;爆炸和死锁;避免方式一;二;三;四;I/O;将零碎的内容作为一个整体进行写入 使用合适的 I/O 操作 API 使用合适的线程 使用 NSCache 做缓存能够减少 I/O;NSCache;为什么不直接用字典?;自动清理系统占用内存 NSCache 是线程安全 - (void)cache:(NSCache *)cache willEvictObject:(id)obj; 缓存对象将被清理时的回调 evictsObjectsWithDiscardedContent 可以控制是否清理;NSCache 里有个NSMutableDictionary;还有些额外信息;Cache 读取;Cache 添加;- (void) setObject: (id)obj forKey: (id)key cost: (NSUInteger)num { _GSCachedObject *oldObject = [_objects objectForKey: key]; _GSCachedObject *newObject; if (nil != oldObject) { [self removeObjectForKey: oldObject-key]; } [self _evictObjectsToMakeSpaceForObjectWithCost: num]; newObject = [_GSCachedObject new]; // Retained here, released when obj is deallocd newObject-object = RETAIN(obj); newObject-key = RETAIN(key); newObject-cost = num; if ([obj conformsToProtocol: @protocol(NSDiscardableContent)]) { newObject-isEvictable = YES; [_accesses addObject: newObject]; } [_objects setObject: newObject forKey: key]; RELEASE(newObject); _totalCost += num; };Cache 自动清理方法;何时自动清理的判断;不要清理 经常访问的 objects;清理前准备工作;清理时执行回调;NSCache 在 SDWebImage 的运用;控制 App 的 Wake 次数;唤起这个过程会有比较大的消耗 通知,VoIP,定位,蓝牙都会使设备从 Standby 状态唤起;定位方法的选择;如何预防这些性能问题需要刻意预防么?;坚持几个原则;如何检查?;监听主线程;用 CFRunLoopObserverCreate 创建一个观察者 接受 CFRunLoopActivity 的回调 用 CFRunLoopAddObserver 将观察者添加到 CFRunLoopGetMain() 主线程 Runloop 的 kCFRunLoopCommonModes 模式下进行观察 创建一个子线程来进行监控 根据两个 Runloop 的状态 BeforeSources 和 AfterWaiting 在区间时间是否能检测到来判断是否卡顿;如何打印堆栈信息 保存现场;;task_threads 取到所有的线程;thread_info 获取线程详细信息;thread_get_state 获取线程里所有栈的信息;栈结构体保存栈数据;栈信息符号化;获取 mach_header 和 slide 计算 ASLR 偏移量;获取符号表的虚拟内存偏移量;找到最匹配的符号地址;获取更多信息;更细化的测量时间消耗,找到耗时方法 给优化定个目标,比如某场景响应操作在 100ms 内完成;如何获取到更多信息呢?;一张图片;hook objc_msgSend 方法能够获取所有被调用的方法,facebook 的 fishhook /facebook/fishho

文档评论(0)

a13355589 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档