iOS的MRC内存管理中,因经常需要手动retain与release对象,如多次release对象。
如果项目是ARC与MRC混编,则会经常出现ARC的autoreleasepool 在释放MRC对象时,访问了被释放的对象,导致message sent to deallocated instance crash。
这种情况下,系统的堆栈信息十分有限,能给的也只有console中的log,给出的
-[UIView retain]: message sent to deallocated instance 0x7f906ca34790
这只给出了使用了已经被释放的UIView内存地址,但具体的uiview是哪个UIView却无法知道。
这时候可以使用OS X的malloc_history命令,查找到一些调用信息
*PS:注意必须在模拟器上运行:
- 打开活动监视器 找到到模拟器上运行的应用的PID
- 打开终端运行命令
sudo malloc_history 36674 0x7f906ca34790
便可看到内存地址对应的对象在该进程下的一些信息