`

iOS开发那些事-性能优化–查找和解决僵尸对象

阅读更多

内存泄漏是当一个对象或变量在使用完成后没有释放掉,那么如果我们走了另外一个极端情况会什么样呢?这就导致过渡释放(over release)问题,从而使对象“僵尸化”,对象称为僵尸(zombies)对象。一个对象已经被释放过了,或者调用者没有这个对象的所有权而释放它, 都会造成过渡释放,产生僵尸对象。

僵尸对象或许对很多人听起来很恐怖、也很陌生,如果要说起EXEC_BAD_ACCESS异常,可能大家并不陌生。试图调用僵尸对象方法应用会崩溃(应用直接跳出),并抛出异常EXEC_BAD_ACCESS。

 

我们看看代码ViewController的代码片段:

 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

NSUInteger row = [indexPath row];

NSDictionary *rowDict = [self.listTeams objectAtIndex:row];

NSString *rowValue  =  [rowDict objectForKey:@"name"];

NSString *message = [[NSString alloc] initWithFormat:@”您选择了%@队。”, rowValue];

UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@”请选择球队”

message:message

delegate:self

cancelButtonTitle:@”Ok”

otherButtonTitles:nil];

    [alert release];                                                                                                                                          ①

[message release];

    [alert show];                                                                                                                                             ②

[tableView deselectRowAtIndexPath:indexPath animated:YES];

}

 注意看程序代码的黑体部分,你会发现什么问题吗?程序运行的结果抛出EXEC_BAD_ACCESS异常。假设我们现在无法找到问题,可以使用 Instruments工具的Zombies跟踪模板。其中Instruments选择Zombies模板,点击Profile按钮就可以进入了。

 

14

 

点击Allocations的“i”按钮,弹出Target菜单配置Zombies模板,在Launch Configuration中勾选Record reference counts和Enable NSZombie detection。其中Record reference counts是显示引用计数,Enable NSZombie detection是能够检测僵尸对象。

 

22
这样在程序运行的时候,如果发现僵尸对象它就会弹出一个对话框,点击其中“→”按钮,在屏幕的下方会显示僵尸对象的详细信息。

 

31

 

僵尸对象为UIAlertView类型,从上到下僵尸对象是引用计数的变化是:创建 → 释放 → 僵尸化。打开扩展详细视图,在右边的跟踪堆栈信息进入我们程序代码,会打开对应代码,定位僵尸对象。

 

51

 

在上面的3条高亮显示的代码会影响对象引用计数,从中我们不难发现问题。关于解决方案就本例而言需要将代码②行的显示警告框的[alert show]语句,放在[alert release]语句之前调用就可以了。这就是僵尸对象问题。

分享到:
评论

相关推荐

    映客直播iOS-App-性能优化.pdf

    映客直播iOS-App-性能优化.pdf

    iOS开发进阶篇-成为一个iOS开发高手

    总的来说,"iOS开发进阶篇-成为一个iOS开发高手"涵盖了从语言特性的深度挖掘,到应用架构设计、系统服务的利用,再到性能优化和新技术的应用,是一份全面且深入的学习资源。通过系统学习并实践其中的知识,开发者...

    iOS开发视频教程

    资源名称:iOS开发视频教程资源目录:【】iOS开发视频教程-第01讲-iOS历史介绍【】iOS开发视频教程-第02讲-XCode安装【】iOS开发视频教程-第03讲-UIView_PPT【】iOS开发视频教程-第04讲-UILabel【】iOS开发视频教程-...

    深入剖析iOS性能优化.pdf

    iOS性能优化 iOS是苹果公司开发的移动操作系统,广泛应用于iPhone、iPad、iPod touch等苹果设备上。...只有充分理解操作系统的原理和框架,以及各种性能优化的手段,才能开发出流畅、高效的iOS应用。

    ios开发 AES-128-ECB加密

    搞了好久在网上搜了很多资料都不能解决最后找到了一个c/c++的底层源码,才实现了最后整理了下上传了。是个ios的demo很详细你定能看懂的。运行在xcode环境下,关键算法的文件是AES.h和AES.mm文件。

    iOS开发----AR

    ARKit,iOS11之后引入全新的框架,允许开发者轻松地为 iPhone 和 iPad 创建 与伦比 的增强现实体验。通过将虚拟对象和虚拟信息同 户周围的环境相互融合,ARKit 使得应用跳出屏幕的限制,让它们能够以全新的方式与...

    iOS开发进阶-完整版

    通过以上这些知识点的介绍,《iOS开发进阶》这本书旨在帮助初级开发者快速掌握iOS应用程序开发的核心技术和最佳实践,并能够通过实战项目进一步提升自己的技术水平。无论是对于想要深入了解iOS开发细节的专业人士...

    IOS 底层原理内存管理性能优化-课件

    《iOS底层原理内存管理性能优化》是一门深入探讨iOS应用开发中关键性能优化技术的课程。这门课程由李明杰老师主讲,主要涵盖了Objective-C语法、多线程、Runtime、内存管理、Runloop、性能优化以及设计模式与架构等...

    iOS-Performance-Optimization:iOS 性能优化专题合集.zip

    iOS-Performance-Optimization:iOS 性能优化专题合集.zip,关于iOS 性能优化梳理、内存泄露、卡顿、网络、GPU、电量、 App 包体积瘦身、启动速度优化等、Instruments 高级技巧、常见的优化技能- Get — Edit

    swift-iOS-CoreML-Yolo在CoreML框架上使用TinyYOLOv1模型实现对象检测

    这个项目,"swift-iOS-CoreML-Yolo",是专为iOS设备设计的,利用强大的机器学习能力来识别和定位图像中的特定对象。下面我们将详细探讨这个过程涉及的关键知识点。 首先,我们要理解CoreML是什么。CoreML是Apple...

    iOS开发基础教程-源代码.rar

    首先,Swift是iOS开发的主要编程语言,它简洁、安全且具有高性能。Swift语法直观易懂,支持函数式编程和面向对象编程。源代码中可能会展示变量声明、控制流语句(如if-else、for-in循环)、函数定义等基本元素,以及...

    藏经阁-手淘iOS性能优化探索-40.pdf

    在手淘iOS应用的开发过程中,性能优化是一项至关重要的任务,尤其在面对用户对页面加载速度、稳定性以及应用启动时间的诸多抱怨时。本文主要围绕手淘iOS性能优化进行深入探讨,包括性能度量、问题排查、版本质量保证...

    location-cleaned 定位ios15.0 最新驱动-iOS专用

    总结,location-cleaned驱动是iOS 15.0中定位服务的一大亮点,它通过数据清洗、隐私保护和性能优化,不仅提升了定位的精度,也增强了用户隐私的安全性。这一技术的应用,无疑使得iOS系统在隐私保护和用户体验方面...

    iOS实例开发源码——iliu-ios-cocos2d-viking-cba07f8.zip

    《iOS实例开发源码——iliu-ios-cocos2d-viking-cba07f8》 这个压缩包文件“iliu-ios-cocos2d-viking-cba07f8.zip”显然包含了iOS平台上一个基于Cocos2D的游戏或应用的源代码。Cocos2D是一个广泛使用的2D游戏开发...

    iOS and macOS 性能优化

    在iOS和macOS平台上进行性能优化是开发过程中至关重要的一环,它关系到应用程序的响应速度、用户体验以及设备电池寿命。本资源"iOS and macOS 性能优化"提供了一个详细指南,帮助开发者提升应用的效率。以下是一些...

    IOS应用源码Demo-电子书阅读器 - iOS PDF Reader-毕设学习.zip

    总的来说,这个源码示例是一个宝贵的教育资源,可以帮助学习者深入理解iOS应用开发的各个方面,包括UI设计、数据处理、性能优化和软件工程实践。尽管技术在不断更新,但基础知识和编程原理依然适用,因此这个项目...

    Learning iOS Programming 3rd Edition-- object-c 和 xcode4的学习文档

    学习iOS开发,对象-c语言和xcode4开发环境的掌握是基础。在这份文档中,作者Alasdair Allan通过《Learning iOS Programming Third Edition》一书,向我们详细介绍了学习iOS编程的途径、注册成为iOS开发者的过程、...

Global site tag (gtag.js) - Google Analytics