【问题标题】:Instruments not detecting a memory leak in Xcode仪器未检测到 Xcode 中的内存泄漏
【发布时间】:2011-08-30 04:36:32
【问题描述】:

这几天我一直在纠结这个问题。我仍在尝试在 Objective-c 中进行内存管理。

这是我的 sn-p(为清楚起见而进行了精简):

- (void)performOperation:(NSString *)operation
{
    if ([@"+" isEqual:operation]) 
    {
        waitingOperation = operation;
    }
    else if ([@"C" isEqual:operation])
    {
        waitingOperation = nil;
    }

}

waitingOperation 只是一个本地私有 NSString(没有@property,没有@synthesize,没有getter/setter)。

当我将 waitingOperation 分配给 nil 时,当它当前指向堆上的 NSString 时,我不应该泄漏内存吗?我对这个方法的调用是在一个从 UILabel display.text 传递 NSString 的 ios 应用程序中。我一直在使用 Instruments 分析此代码,但从未发现任何泄漏。我真的很感激能澄清这一点。提前致谢。

【问题讨论】:

    标签: objective-c xcode memory memory-leaks instruments


    【解决方案1】:

    您尚未通过调用retain 声明对waitingOperation 的所有权,因此您无需对release 负责。

    如果字符串在其他地方释放(例如通过处理UILabel),这可能会让您在某些时候遇到问题,在这种情况下,您将留下一个悬空指针。但你不会在这里泄露任何东西。

    【讨论】:

    • 非常感谢。我认为现在这是有道理的。我实际上误报了 UILabel。它真的是 UIButton。我看到在应用程序生命周期内,堆上的每个按钮都存在一个对象。没有泄漏,我指向这些按钮对象的临时指针在应用程序期间是安全的。我希望我理解正确。
    • 另外,是否推荐使用此表单,或者我应该在 ios 应用程序中保留然后释放此 UIButton 对象?
    • @Tom 如果按钮位于 NIB 文件中,则无需单独管理它。但是,如果您以可能超出其容器范围的方式存储和使用对按钮等对象的引用,那么您需要明确管理该外部所有权。
    猜你喜欢
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 2018-07-09
    • 2011-10-27
    相关资源
    最近更新 更多