在分析Apple 的 SimpleEKDemo 应用程序时,我注意到存在一些内存泄漏。
其中一个泄漏是 __NSArrayM,它在 Leaked Blocks 历史记录中有 3 行,即 Malloc/Assign/Release。
问题 - 有人可以在这里指出根本原因问题吗?(我正在尝试学习如何从创建泄漏对象的位置获取 Instruments 输出,然后从那里找出根本原因,所以这将非常有用)
在分析Apple 的 SimpleEKDemo 应用程序时,我注意到存在一些内存泄漏。
其中一个泄漏是 __NSArrayM,它在 Leaked Blocks 历史记录中有 3 行,即 Malloc/Assign/Release。
问题 - 有人可以在这里指出根本原因问题吗?(我正在尝试学习如何从创建泄漏对象的位置获取 Instruments 输出,然后从那里找出根本原因,所以这将非常有用)
您会注意到,当您运行带有泄漏的演示时,viewDidLoad
(责任框架)中存在泄漏。如果您切换到Call Tree
详细信息并且已启用Invert Call Tree
,您将看到与调用相关的泄漏+[NSArray new]
。如果你稍微打开它,你会看到在'sinitWithArray
中调用了哪个。问题是,RootViewController
viewDidLoad
self.eventsList = [[NSMutableArray alloc] initWithArray:0];
eventsList
是一个retain
ed 属性,因此创建的对象的保留计数为 2。但是,它只有release
d 一次,无论是通过release
indealloc
还是通过重新分配eventsList
. 你将不得不自动释放这个对象。
self.eventsList = [[[NSMutableArray alloc] initWithArray:0] autorelease];
一旦修复,你不应该得到任何错误。