在这种情况下如何创建自动释放NSDictionary?

时间:2011-09-15 19:41:58

标签: iphone objective-c ios cocoa-touch nsdictionary

我有一个名为entries的NSMutableArray实例,我想将它的一个值(这是一个NSDictionary)发送给一个方法,但我正在考虑如何避免它泄漏或正确释放它。这就是我现在正在做的事情:

NSDictionary *pdata = [self.entries objectAtIndex:indexPath.row];

[self start_download:pdata];

[pdata release]; // <--> Is it ok to do this ?

求助,

的Stephane

4 个答案:

答案 0 :(得分:4)

您没有分配,复制或保留pdata,因此您不会发布它

答案 1 :(得分:3)

您绝对不应该发布pdata,因为您从未保留过它。 -objectAtIndex:返回一个非拥有对象。如果-start_download:在返回后需要引用pdata(例如,如果它在某个异步过程中保留它),那么它应该保留pdata本身,然后它应该释放pdata当它完成时,但它与您粘贴的代码位正交。

如果您还没有这样做,请阅读Cocoa Memory Management Rules

答案 2 :(得分:2)

你是否有一个start_download的委托方法来处理下载完成?你应该放弃它。

答案 3 :(得分:2)

我会让start_download对pdata进行保留,然后在完成后释放它。拥有需要将数据挂起来保留并释放自己的例程总是一个好主意,这样你就不会关心对象如何到达你以及之后会发生什么。