0

在分析Apple 的 SimpleEKDemo 应用程序时,我注意到存在一些内存泄漏。

其中一个泄漏是 __NSArrayM,它在 Leaked Blocks 历史记录中有 3 行,即 Malloc/Assign/Release。

问题 - 有人可以在这里指出根本原因问题吗?(我正在尝试学习如何从创建泄漏对象的位置获取 Instruments 输出,然后从那里找出根本原因,所以这将非常有用)

4

1 回答 1

3

您会注意到,当您运行带有泄漏的演示时,viewDidLoad(责任框架)中存在泄漏。如果您切换到Call Tree详细信息并且已启用Invert Call Tree,您将看到与调用相关的泄漏+[NSArray new]。如果你稍微打开它,你会看到在'sinitWithArray中调用了哪个。问题是,RootViewControllerviewDidLoad

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

eventsList是一个retained 属性,因此创建的对象的保留计数为 2。但是,它只有released 一次,无论是通过releaseindealloc还是通过重新分配eventsList. 你将不得不自动释放这个对象。

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

一旦修复,你不应该得到任何错误。

于 2011-05-30T06:03:31.607 回答