Iphone 为什么SimpleEKDemo代码中存在内存泄漏?
在分析I Notes时,存在一些内存泄漏 其中一个泄漏是uu NSArrayM,在泄漏块历史记录中有3行,一个Malloc/Assign/ReleaseIphone 为什么SimpleEKDemo代码中存在内存泄漏?,iphone,objective-c,ios,memory-management,eventkit,Iphone,Objective C,Ios,Memory Management,Eventkit,在分析I Notes时,存在一些内存泄漏 其中一个泄漏是uu NSArrayM,在泄漏块历史记录中有3行,一个Malloc/Assign/Release 问题-有人能指出问题的根本原因吗?(我正在尝试学习如何获取创建泄漏对象的位置的仪器输出,然后从中找出根本原因,因此这将非常有用)您将注意到,当使用泄漏运行演示时,viewdiload(负责帧)中存在泄漏。如果切换到调用树详细信息,并且启用了反转调用树,您将看到与调用相关的泄漏+[NSArray new]。如果您稍微打开它,您将看到initWit
问题-有人能指出问题的根本原因吗?(我正在尝试学习如何获取创建泄漏对象的位置的仪器输出,然后从中找出根本原因,因此这将非常有用)您将注意到,当使用泄漏运行演示时,
viewdiload
(负责帧)中存在泄漏。如果切换到调用树
详细信息,并且启用了反转调用树
,您将看到与调用相关的泄漏+[NSArray new]
。如果您稍微打开它,您将看到initWithArray
,它是在RootViewController
的viewDidLoad
中调用的。问题是
self.eventsList = [[NSMutableArray alloc] initWithArray:0];
eventsList
是一个retain
ed属性,因此创建的对象的retain计数为2。但是,通过dealloc
中的release
或通过重新分配eventsList
只发布一次d。您必须自动释放此对象
self.eventsList = [[[NSMutableArray alloc] initWithArray:0] autorelease];
一旦修复,您不应该得到任何错误。您会注意到,当您运行带有泄漏的演示时,viewDidLoad
(负责帧)中存在泄漏。如果切换到调用树
详细信息,并且启用了反转调用树
,您将看到与调用相关的泄漏+[NSArray new]
。如果您稍微打开它,您将看到initWithArray
,它是在RootViewController
的viewDidLoad
中调用的。问题是
self.eventsList = [[NSMutableArray alloc] initWithArray:0];
eventsList
是一个retain
ed属性,因此创建的对象的retain计数为2。但是,通过dealloc
中的release
或通过重新分配eventsList
只发布一次d。您必须自动释放此对象
self.eventsList = [[[NSMutableArray alloc] initWithArray:0] autorelease];
一旦修复,就不应该出现任何错误。oh-那么你的意思是,如果你有一个带有“retain”的属性,那么你应该小心地通过“alloc”为它创建一个变量,因为它实际上意味着两(2)个retain计数,而不是一(1)?对吗?(如果是,那么我学到了一个很好的教训,我没有意识到这一点)alloc
创建了一个保留计数为1的实例,但是对retain
属性的赋值为实例添加了一个retain
调用,使保留计数为2。好的,谢谢-我想我现在必须在此基础上查看整个代码堆:)哦-那么你的意思是如果你有一个“retain”属性,那么您应该小心地通过“alloc”为它创建一个变量,因为它实际上意味着两(2)个保留计数,而不是一(1)?对吗?(如果是-那么我学到了一个很好的教训,我没有意识到这一点)alloc
创建了一个具有retain count 1的实例,但是对retain
属性的赋值为实例添加了一个retain
调用,使retain count为2。好的,谢谢-我想我现在必须在此基础上查看整个代码堆:)