2011-01-26 153 views
0

我想在我的代码中得到一些内存泄漏,我该如何修复内存泄漏。iPhone内存泄漏问题?

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 - [receiveData release];但是发生了内存泄漏。我知道保留,计数增加,但我怎么才能正确地发布数据。

谢谢!

回答

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中释放它。

EDIT显示代码:

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

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

receiveData = [[NSMutableData data] retain]; - 如果您打电话给release,此对象将在超出范围时被删除。如果你会写

receiveData = [NSMutableData data]; 

它时,将自动

编辑

如果您使用的是他们init字方法,那么你是这样的对象的所有者删除了的范围和他们不会被自动删除,直到你打电话给release方法。如果你不想拥有这个对象,用一些静态方法来创建它。例如:

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

这与调用

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

自动释放意味着该对象将接收release方法时超出范围 - 如果它不保留将被自动删除

+0

感谢您的答复。在这种情况下,“[节setValue:[[NSMutableArray alloc] init] forKey:display_date];” //内存泄漏在这里。我怎样才能修复泄漏? – Pugal 2011-01-26 17:44:58