【问题标题】:How to resolve 'Potential Leak' issue如何解决“潜在泄漏”问题
【发布时间】:2012-01-24 13:44:22
【问题描述】:

我正在使用 xcode 中的“分析”工具来检查我的应用程序中的潜在泄漏。

因此,我收到以下警告。

如何解决上面显示的潜在泄漏? “self.answerArray”只是我在头文件中声明的一个数组

【问题讨论】:

    标签: objective-c ios memory-leaks


    【解决方案1】:

    您在数组上调用了mutableCopy(它返回一个保留计数为 +1 的新数组 - 您拥有它),并将它分配给一个属性(我假设它是一个强/保留属性)而你没有释放它。你正在泄漏内存。

    您应该在将 tempArray 分配给属性后释放它 - 并确保在您的类的 dealloc 方法中释放该属性。

    【讨论】:

    • 哦,我没有意识到可变副本会增加保留计数。感谢您的回复
    • 根据约定,名称中包含 Copy、Alloc、Retain 或 New 的任何内容均归调用者所有。我一直认为它是 CARN 规则 :)
    【解决方案2】:

    您应该将保留/释放发送到 answerArray(在分配新对象之前释放旧对象,保留新对象),或者,最好声明一个属性

    @property (retain) NSArray* answerArray;
    

    这样编译器将为您生成释放/保留(在分配时)。见documentation。否则,对象 answerArray 在赋值之前引用 (answerArray = tempArray) 将在内存中保持悬空状态。

    如果您将使用已声明的属性,请确保将您的临时变量添加到自动释放池:

    tempArray = [[self.answerArray mutableCopy]autorelease];
    

    或者只是发送它自己释放(就在它超出范围之前)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-23
      • 2020-01-01
      • 2012-02-18
      • 2011-05-28
      相关资源
      最近更新 更多