Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.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内存泄漏问题?_Iphone_Memory_Project Management - Fatal编程技术网

iPhone内存泄漏问题?

iPhone内存泄漏问题?,iphone,memory,project-management,Iphone,Memory,Project Management,我想在我的代码中得到一些内存泄漏,如何修复内存泄漏 dashboard = [[NSMutableArray alloc] init]; [dashboard addObject:[[NSDictionary alloc] initWithObjectsAndKeys:@"demo_1.jpg",@"pic_source",@" Head",@"Title",nil]; // memory leaks here. if ( theConnection ) { receiv

我想在我的代码中得到一些内存泄漏,如何修复内存泄漏

dashboard  = [[NSMutableArray alloc] init];
[dashboard addObject:[[NSDictionary alloc]  initWithObjectsAndKeys:@"demo_1.jpg",@"pic_source",@"  Head",@"Title",nil];   // memory leaks here. 


if ( theConnection ) {
    receiveData = [[NSMutableData data] retain]; //memory leaks here.
}
但是我在[接收数据发布]中发布了dealloc-in;,但是内存泄漏发生了。我知道保留,计数是增加的,但是我如何才能正确地发布数据


谢谢

仪表板添加对象:[[NSDictionary alloc]initWithObjectsAndKeys:@“demo_1.jpg”,“picu source”,“Head”,“Title”,nil]
您已经调用了init方法,那么您就是一个对象的所有者。当您将其放入数组时,也会调用retain。只要打电话给autorelease修复漏洞

receiveData=[[NSMutableData data]retain]-如果您要调用
release
,此对象将在超出范围时被删除。如果你愿意写

receiveData = [NSMutableData data];
当超出范围时,它将被自动删除

编辑

如果您使用的方法中包含
init
word,则您是此类对象的所有者,在您对其调用
release
方法之前,不会自动删除这些对象。如果不想拥有该对象,请使用某种静态方法创建它。例如:

NSMutableArray *array = [NSMutableArray arrayWithObjects: ... , nil];
这和打电话一样

NSMutableArray *array = [[[NSMutableArray alloc] initWithObjects: ... , nil] autorelease];

Autorelease表示对象在超出范围时将收到一个发布方法,如果未保留,则将自动删除该方法。dashboard addObject:[[NSDictionary alloc]initWithObjects和Keys:@“demo_1.jpg”,“Picu source”,“Head”,“Title”,nil] 您已经调用了init方法,那么您就是一个对象的所有者。当您将其放入数组时,也会调用retain。只要打电话给autorelease修复漏洞

receiveData=[[NSMutableData data]retain]-如果您要调用
release
,此对象将在超出范围时被删除。如果你愿意写

receiveData = [NSMutableData data];
当超出范围时,它将被自动删除

编辑

如果您使用的方法中包含
init
word,则您是此类对象的所有者,在您对其调用
release
方法之前,不会自动删除这些对象。如果不想拥有该对象,请使用某种静态方法创建它。例如:

NSMutableArray *array = [NSMutableArray arrayWithObjects: ... , nil];
这和打电话一样

NSMutableArray *array = [[[NSMutableArray alloc] initWithObjects: ... , nil] autorelease];

自动释放意味着对象在超出范围时将收到一个
释放
方法-如果它没有被保留,将自动删除

我认为您的泄漏是:

[dashboard addObject:[[NSDictionary alloc]  initWithObjectsAndKeys:@"demo_1.jpg",@"pic_source",@"  Head",@"Title",nil]; 
把它改成

[dashboard addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"demo_1.jpg",@"pic_source",@"  Head",@"Title",nil]; 
addObject保留该对象,因此您可以使用方便的创建方法来自动释放它们创建的对象

还有另一个可能的泄漏。。。如果将receiveData定义为具有retain属性的属性,则无需显式调用retain。您可以调用self.receiveData=[NSMutableData]
。这将保留它。当然,您仍然需要在dealloc中发布它

编辑以显示代码:

NSMutableArray *anArray = [[[NSMutableArray alloc] init] autorelease];
 [sections setValue:anArray forKey:display_date];

我认为你的泄漏在线路上:

[dashboard addObject:[[NSDictionary alloc]  initWithObjectsAndKeys:@"demo_1.jpg",@"pic_source",@"  Head",@"Title",nil]; 
把它改成

[dashboard addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"demo_1.jpg",@"pic_source",@"  Head",@"Title",nil]; 
addObject保留该对象,因此您可以使用方便的创建方法来自动释放它们创建的对象

还有另一个可能的泄漏。。。如果将receiveData定义为具有retain属性的属性,则无需显式调用retain。您可以调用self.receiveData=[NSMutableData]
。这将保留它。当然,您仍然需要在dealloc中发布它

编辑以显示代码:

NSMutableArray *anArray = [[[NSMutableArray alloc] init] autorelease];
 [sections setValue:anArray forKey:display_date];

谢谢你的回复。在本例中,“[sections setValue:[[NSMutableArray alloc]init]forKey:display_date];”//此处内存泄漏。如何修复泄漏?如果您使用init word方法,则表示您是对象的所有者。例如,您可以调用[NSMutableArray arrayWithObjects:…];那你就不是主人了。或者你可以在初始化后调用autorelease方法。谢谢回复。在本例中,“[sections setValue:[[NSMutableArray alloc]init]forKey:display_date];”//此处内存泄漏。如何修复泄漏?如果您使用init word方法,则表示您是对象的所有者。例如,您可以调用[NSMutableArray arrayWithObjects:…];那你就不是主人了。或者可以在init之后调用autorelease方法。