[英]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.