内存泄漏iPhone问题?

时间:2011-01-26 17:28:39

标签: 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 ) {
    receiveData = [[NSMutableData data] retain]; //memory leaks here.
}

但我已经发布了dealloc - in [receiveData release] ;,但发生了内存泄漏。我知道保留,计数增加,但我怎样才能正确发布数据。

谢谢!

2 个答案:

答案 0 :(得分:2)

dashboard addObject:[[NSDictionary alloc] initWithObjectsAndKeys:@"demo_1.jpg",@"pic_source",@" Head",@"Title",nil]; 您调用了init方法 - 然后您就是对象的所有者。当你把它放到数组中时 - 也会调用retain。只需调用autorelease来修复泄漏。

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

receiveData = [NSMutableData data];

超出范围时会自动删除

修改

如果您使用的是带有init字词的方法,那么您就是这些对象的所有者,在您对它们调用release方法之前,它们不会自动删除。如果您不想拥有该对象,请使用一些静态方法创建它。例如:

NSMutableArray *array = [NSMutableArray arrayWithObjects: ... , nil];

与调用

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

Autorelease表示对象在超出范围时将收到release方法 - 如果未保留,将自动删除

答案 1 :(得分:2)

我认为你的泄密:

[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.recieveData = [NSMutableData data]。这将保留它。当然,你仍然需要在dealloc中发布它。

编辑以显示代码:

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