代码之家  ›  专栏  ›  技术社区  ›  Richard J. Ross III

Objective-C确定哪些对象保留另一个对象

  •  1
  • Richard J. Ross III  · 技术社区  · 14 年前

    有什么方法可以让我知道是什么代码触发了特定对象实例的retain计数的增加?如果重要的话,我正在使用GHUnit。

    4 回复  |  直到 14 年前
        1
  •  2
  •   Rob Fonseca-Ensor    14 年前

    leaks工具(XCode中的“工具”之一)能够分析这类事情,但我不认为您可以用编程的方式完成它。

    这里有一个很棒的教程: http://mobileorchard.com/find-iphone-memory-leaks-a-leaks-tool-tutorial/

    (更新以总结注释):如果要在retain方法中设置断点(查看堆栈跟踪),可以重写retain方法。

        2
  •  3
  •   Alexsander Akers    14 年前

    Build & Analyze . 它通常可以告诉你一个对象是否被保留而不是释放/

        3
  •  2
  •   Adam Rosenfield    14 年前

    retain 埃德和 autorelease 在一份声明中,这是完全正确的,但是它的保留数将增加1。

    如果你想找到一个特定的物体 保持 ed,重写类的 保持

    @implementation MyClass
    -(id) retain
    {
        if(self == ObjectThatImTracking)
            NSLog(@"[ObjectThatImTracking retain]\n");  // put a breakpoint here
        return [super retain];
    }
    

    然后在调试器中运行程序,并在遇到断点时查看调用堆栈。

        4
  •  0
  •   yozhik    14 年前

    你试着在模块中找到你班上所有的保留案例了吗?也许会有帮助。。