0

在我的代码中显示 2 处内存泄漏,请参阅并帮助我。

1.第一

UIButton *push = (UIButton *)sender;
NSString *string = [NSString stringWithFormat:@"%@",[push currentTitle]];
NSArray *chunks = [[NSArray alloc]initWithArray:[stringcomponentsSeparatedByString:@"-"]];
list = [[NSMutableArray alloc]initWithArray:chunks];
(NSMutableArray *list;)
[chunks release];

2.第二

这里首先是源代码

NSAutoreleasePool *pool = [NSAutoreleasePool new];
NSURL *url = [[NSURL alloc]initWithString:@"http://www/absdf.com/myXML.xml"];
self.parser = [[NSXMLParser alloc]initWithContentsOfURL:url];
[parser setDelegate:self];
[parser parse];
[parser release];
[url release];
[pool drain];

虽然我正在执行此代码并在行号上使用此仪器工具:2 显示内存泄漏和最重的回溯。所以请告诉原因。?

4

4 回答 4

0

显然,list = [[NSMutableArray alloc]initWithArray:chunks];永远不会被释放。

于 2012-06-18T08:06:12.073 回答
0
self.parser = [[NSXMLParser alloc]initWithContentsOfURL:url];

alloc/init返回一个retained对象,如果你的parser属性是用retain属性声明的,那么你就过度保留它了。它应该是:

 self.parser = [[[NSXMLParser alloc]initWithContentsOfURL:url] autorelease];

PS 确保您对list实例变量进行了适当的内存管理。只是为了确保您更好地使用属性。

于 2012-06-18T08:08:51.813 回答
0
  1. 列表应该在某个地方发布,也许在 dealloc

    - (void)dealloc {
       [list release];
       [super dealloc];
    }
    
  2. parser = [[NSXMLParser alloc]initWithContentsOfURL:url];

或者

NSXMLParser *tempParser = [[NSXMLParser alloc]initWithContentsOfURL:url];
self.parser = tempParser;
[tempParser release];
于 2012-06-18T08:09:05.357 回答
0

除了其他答案之外,您的池应该被释放

NSAutoreleasePool *pool = [NSAutoreleasePool new];

//... then
[pool release];
于 2012-06-18T08:09:34.813 回答