Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 为什么SimpleEKDemo代码中存在内存泄漏?_Iphone_Objective C_Ios_Memory Management_Eventkit - Fatal编程技术网

Iphone 为什么SimpleEKDemo代码中存在内存泄漏?

Iphone 为什么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

在分析I Notes时,存在一些内存泄漏

其中一个泄漏是uu NSArrayM,在泄漏块历史记录中有3行,一个Malloc/Assign/Release


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

您将注意到,当使用泄漏运行演示时,
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。好的,谢谢-我想我现在必须在此基础上查看整个代码堆:)