内存泄漏的地方,因为显示泄漏



在我的代码中显示 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显示内存泄漏和最重的回溯。所以请让知道原因。?

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

NSAutoreleasePool *pool = [NSAutoreleasePool new];
//... then
[pool release];

显然,list = [[NSMutableArray alloc]initWithArray:chunks];永远不会发布。

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

alloc/init 返回一个 retained 对象,如果parser属性声明为 retain 属性,则过度保留它。它应该是:

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

附言:确保您对list实例变量进行正确的内存管理。只是为了确保您最好使用属性。

  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];

相关内容

最新更新