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

时间:2012-06-18 07:58:37

标签: objective-c ios cocoa-touch instruments

在我的代码中显示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.SECOND

这是源代码优先

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 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

alloc/init会返回retained个对象,如果您的parser属性被声明为retain属性,那么您将保留它。它应该是:

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

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

答案 2 :(得分:0)

  1. 列表应该在某个地方发布,也许在dealloc

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

  3. NSXMLParser *tempParser = [[NSXMLParser alloc]initWithContentsOfURL:url];
    self.parser = tempParser;
    [tempParser release];
    

答案 3 :(得分:0)

除了其他答案,您的游泳池应该被释放

NSAutoreleasePool *pool = [NSAutoreleasePool new];

//... then
[pool release];