【问题标题】:How to debug memory management in Obj-C?如何在 Obj-C 中调试内存管理?
【发布时间】:2014-11-06 11:12:06
【问题描述】:

很好established-retainCount 是无用的,甚至——或者更确切地说特别是(?)——用于调试目的。

那么,假设我们身处一个没有 ARC 的世界,有哪些策略可以调试内存相关问题?当我认为某个对象被删除时,如何验证它是否已被删除?

我问这个问题是因为,作为 Objective-c 的学习者,我想验证在一些不太明显的情况下(例如在桥接转换期间发生所有权转移时)资源何时被释放。

【问题讨论】:

  • -dealloc 中致电NSLog()。让它喊出指针和正在释放的对象的类。和/或在dealloc 中放置一个断点。
  • -dealloc 的调用方式与 c++ 析构函数类似吗?
  • 是的。 [15 个字符]
  • 是的,它像 c++ detrutior 一样工作。唯一不同的是,如果没有 ARC,您必须手动调用 [super dealloc]
  • 试试内存检测工具(效果很好)。选择Product/Profile

标签: objective-c memory-management memory-leaks


【解决方案1】:

当我想验证我没有泄漏特定类型的对象时,我会执行以下操作:

static int gAllocCount = 0;

@implementation MyClass 

- (id)init
{
    NSLog(@"ALLOC MyClass %d", ++gAllocCount);
    return [super init];
}

- (void)dealloc
{
    NSLog(@"DEALLOC MyClass %d", --gAllocCount);
}

这些天,我使用Instruments

Instruments 中的某些任务并不像它们应该的那么简单,但是一旦您知道如何使用它,它就会是一个非常强大的工具。您可以记录每个对象的每个 alloc/retain/release/dealloc,完成堆栈跟踪,并且可以按特定的类名进行过滤。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多