2010-07-20 74 views
2

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

链接到屏幕转储从仪器:http://i26.tinypic.com/28227iw.png

BR //克里斯托弗

+1

我不知道Instrumens是否具有这样的智能,但if语句只包含listOfItems而不包含paymentMethods。是否有可能listOfItems为空,但不是Paymentmethods?如果是的话,这将是一个泄漏,但如前所述,我不确定仪器分析是否也是这样。 – HerrVoennchen 2010-07-20 10:07:29

+0

这是答案。如果paymentMethods不为零且listOfItems为零,则只需覆盖paymentMethods的值并丢失对该数组的引用。因此,泄漏。 – Costique 2010-07-20 10:20:51

+0

是的,这是正确的。另外,if语句是多余的。您可以发送释放消息。如果它已经为零,则发送一条消息给零,并且不会发生任何事情。 – Rengers 2010-07-20 10:42:37

回答

1

我做dealoc释放这两个对象,并将其设置为nil在viewDidUnload

我可能误解句子的语法,但是 您应该发布设置为零在均为 dealloc和viewDidUnload。

作为一般规则,您应该始终释放并设置为nil作为一对,除非您有特定的原因不要。

+0

更不用说,仅仅释放一个对象而没有将它的引用设置为零是非常危险的。 – Costique 2010-07-20 10:17:30

+0

感谢您的回复。我看到您指出并修正了代码中的错误/缺陷。但结果是一样的。那么如果你想在每次视图加载时初始化类对象,应该如何实现呢? – Christofffer 2010-07-20 11:40:44

+0

你应该在viewUnload中释放它们并在视图中创建它们加载 – Akusete 2010-07-20 11:53:41