2011-05-30 91 views

回答

3

你会发现,当您运行与泄漏演示在viewDidLoad(负责框架)有泄漏。如果切换到Call Tree细节,如果你有启用Invert Call Tree,你会看到与呼叫+[NSArray new]相关的泄漏。如果您打开一点,你会看到initWithArray这就是所谓的RootViewControllerviewDidLoad。问题位,

self.eventsList = [[NSMutableArray alloc] initWithArray:0]; 

eventsListretain ED属性,以便创建该对象具有2的保留计数然而它只是releaseð一次或者通过releasedealloc或通过eventsList重新分配。你必须自动释放这个对象。

self.eventsList = [[[NSMutableArray alloc] initWithArray:0] autorelease]; 

修好后,你不应该得到任何错误。

+0

哦 - 所以你的意思是,如果你有“保留”的属性,那么你要小心,以通过创建“黄金”为它的变量,因为它有效地意味着两(2)保留计数不是一(1)?那是对的吗? (如果是的话 - 那么我已经学到了一个很好的教训,但我没有意识到这一点) – Greg 2011-05-30 06:06:08

+0

'alloc'创建一个保留计数为1的实例,但是对'retain'属性的赋值给实例添加了一个'retain'调用使保留计数2. – 2011-05-30 06:10:09

+0

好的谢谢 - 我想我必须在此基础上查看整个代码堆:) – Greg 2011-05-30 06:12:12