繁体   English   中英

内存泄漏iPhone中的问题?

[英]Memory leaks Problem in 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-in [receiveData release] ;,但是发生了内存泄漏。 我知道保留,计数增加了,但是我如何正确地释放数据。

谢谢!

dashboard addObject:[[NSDictionary alloc] initWithObjectsAndKeys:@"demo_1.jpg",@"pic_source",@" Head",@"Title",nil]; 您已经调用了init方法-然后您就是对象的所有者。 当您将其放入数组中时,也会调用保留。 只需致电自动发布即可修复泄漏。

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

receiveData = [NSMutableData data];

超出范围时将自动删除

编辑

如果您使用的方法带有init字,则说明您是此类对象的所有者,直到您对它们调用release方法后,它们才会被自动删除。 如果您不想拥有该对象,则可以使用一些静态方法来创建它。 例如:

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

和打电话一样

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

自动释放意味着对象超出范围时将收到release方法-如果未保留,则将自动删除

我认为您在生产线上的泄漏:

[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定义为具有keep属性的属性,则无需显式调用keep。 您可以调用self.recieveData = [NSMutableData data] 这将保留它。 当然,您仍然需要在dealloc中释放它。

编辑以显示代码:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM