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方法。