【问题标题】:Why do I have a memory leak here?为什么我这里有内存泄漏?
【发布时间】:2010-07-20 10:01:55
【问题描述】:

我不明白为什么 Instruments/Leaks 告诉我 viewDidLoad 中存在内存泄漏。我确实在dealoc中释放了两个对象,并在viewDidUnload中将它们设置为nil。有人可以在这里给我一个线索吗?

Instruments 的屏幕转储链接:http://i26.tinypic.com/28227iw.png

BR //克里斯托弗

【问题讨论】:

  • 我不知道 Instrumens 是否有这样的智能,但 if 语句只包含 listOfItems 而不是 paymentMethods。 listOfItems 是否可能为 null 但 Paymentmethods 不是?如果是,那将是泄漏,但如前所述,我不确定我是否也以这种方式进行仪器分析。
  • 这是的答案。如果 paymentMethods 不是 nil 并且 listOfItems 是 nil,那么您只需覆盖 paymentMethods 的值并丢失对数组的引用。因此,泄漏。
  • 是的,这是正确的。此外,if 语句是多余的。您可以发送发布消息。如果它已经是 nil,你向 nil 发送一条消息,什么都不会发生。

标签: iphone objective-c memory-management


【解决方案1】:

我确实在dealoc中释放了两个对象,并在viewDidUnload中将它们设置为nil

我可能误解了句子的语法,但是 您应该释放 并且 dealloc 和 viewDidUnload 中设置为 nil。

作为一般规则,您应该始终成对释放并设置为零,除非您有特定的理由不这样做。

【讨论】:

  • 更不用说仅仅释放一个对象而不将它的引用设置为 nil 是很危险的。
  • 感谢您的回复。我看到您指出并纠正它们的代码中的错误/缺陷。但结果是一样的。那么如果要在每次视图加载时初始化类对象,应该如何实现呢?
  • 你应该在 viewUnload 中释放它们并在 viewLoad 中创建它们
  • 好的,我通过另一种方式初始化 NSMutableArray 让它工作:这项工作:self.listOfItems = [[NSMutableArray alloc]init]; self.paymentmethods = [[NSMutableArray alloc]init];这不起作用: self.listOfItems = [[NSMutableArray array]retain]; self.paymentmethods = [[NSMutableArray 数组]保留];你们知道为什么其他会导致泄漏吗?
  • 这两个泄漏,假设属性被保留。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 2015-08-04
  • 2016-08-03
相关资源
最近更新 更多