Iphone 为什么我这里有内存泄漏?

Iphone 为什么我这里有内存泄漏?,iphone,objective-c,memory-management,Iphone,Objective C,Memory Management,我不明白为什么Instruments/Leaks告诉我viewDidLoad中存在内存泄漏。我确实在dealoc中释放了这两个对象,并在viewDidUnload中将它们设置为nil。有人能给我一个线索吗 从仪器到屏幕转储的链接: 溴 //克里斯托弗 我确实在dealoc中释放了这两个对象,并在viewDidUnload中将它们设置为nil 我可能误解了这个句子的语法,但是 您应该在中释放并将设置为nil,解除锁定和viewDidUnload 作为一般规则,除非您有特定的理由不这样做,否则您应该

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

从仪器到屏幕转储的链接:

溴 //克里斯托弗

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

我可能误解了这个句子的语法,但是 您应该在中释放并将设置为nil,解除锁定和viewDidUnload


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

我不知道Instrumens是否有这样的智能,但if语句只包含listOfItems,而不包含paymentMethods。ListoItems是否可能为空,但Paymentmethods是否为空?如果是,这将是一个泄漏,但正如所说的,我不确定Instrumns是否也这样分析。这就是答案。如果paymentMethods不是nil,而ListoItems是nil,则只需覆盖paymentMethods的值,并丢失对数组的引用。因此,泄漏。是的,这是正确的。此外,if语句是冗余的。您只需发送发布消息即可。如果它已经是nil,那么您向nil发送一条消息,什么也不会发生。更不用说仅仅释放一个对象而不将对它的引用设置为nil是非常危险的。谢谢您的回复。我看到了您指出并纠正的代码中的错误/缺陷。但结果是一样的。那么,如果您想在每次加载视图时初始化类对象,应该如何实现这一点呢?您应该在viewUnload中释放它们,并在viewLoadOk中创建它们。我通过另一种方式初始化NSMutableArray来实现这一点:这项工作:self.listOfItems=[[NSMutableArray alloc]init];self.paymentmethods=[[NSMutableArray alloc]init];这不起作用:self.listOfItems=[[NSMutableArray]retain];self.paymentmethods=[[NSMutableArray]retain];你们知道为什么另一个会导致泄漏吗?假设保留了属性,那么这两个都会泄漏。