面试题答案
一键面试常用技巧
- 启用僵尸对象检测:在Xcode中,通过Edit Scheme -> Run -> Diagnostics,勾选“Zombie Objects”。
- 使用NSZombieEnabled环境变量:在终端中,通过设置
NSZombieEnabled=YES
运行应用。 - 借助 Instruments 的 Zombies 工具:打开Instruments,选择Zombies模板,运行应用并监控。
工作原理
- 启用僵尸对象检测:Xcode通过在应用运行时,将已释放的对象转换为特殊的“僵尸对象”。当代码尝试向这些对象发送消息时,系统会捕获该操作并抛出异常,同时打印出详细的调用栈信息,帮助开发者定位问题。
- NSZombieEnabled环境变量:设置该环境变量后,系统同样会将已释放对象转换为僵尸对象。其原理与Xcode设置类似,通过改变对象释放机制,使已释放对象不会真正被销毁,而是以僵尸对象形式存在,以便捕获对其的非法消息发送。
- Instruments 的 Zombies 工具:Instruments的Zombies工具在应用运行时,实时监测内存中对象的生命周期。它通过记录对象的分配、释放等操作,当检测到向已释放对象发送消息时,能够精确记录相关信息,如发送消息的代码位置、僵尸对象的类型等,帮助开发者全面了解问题所在。