在我的代码中显示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显示内存泄漏与最重的回溯。 所以请让我们知道原因。?
答案 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)
列表应该在某个地方发布,也许在dealloc
中- (void)dealloc {
[list release];
[super dealloc];
}
parser = [[NSXMLParser alloc]initWithContentsOfURL:url];
或
NSXMLParser *tempParser = [[NSXMLParser alloc]initWithContentsOfURL:url];
self.parser = tempParser;
[tempParser release];
答案 3 :(得分:0)
除了其他答案,您的游泳池应该被释放
NSAutoreleasePool *pool = [NSAutoreleasePool new];
//... then
[pool release];