【发布时间】:2010-02-19 17:49:43
【问题描述】:
我是 iPhone 编程的新手,我正在针对 Instruments 中的 Leaks 工具运行我的应用程序。该工具发现了一些泄漏,所有这些似乎都指向使用 NSXMLParser 的类中的 1 行代码:
- (BOOL)parse{
NSURL *url = [[NSURL alloc] initWithString:@"[url here]"];
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:self];
NSLog(@"NSXMLParser initialized");
[parser parse];
[url release];
[parser release];
return YES;
}
该工具指向将解析器创建为存在泄漏的行:
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
谁能指出我在这个问题上的正确方向?我已经在我的代码中检查了一个小时的引用计数,但没有运气。
更新:
好的,从 2 个答案中得到建议,我在创建 NSURL 之前添加了这些行:
[[NSURLCache sharedURLCache] setMemoryCapacity:0];
[[NSURLCache sharedURLCache] setDiskCapacity:0];
我在发布解析器之前添加了这一行:
[parser setDelegate:nil];
每次添加都减少了泄漏的数量,现在我减少到了 2 个。CFNetwork 1 分,Foundation 作为负责库的 1 分。检查两者的调用堆栈根本没有显示我的任何代码。
还有什么我可能做错了吗?
【问题讨论】:
标签: iphone objective-c cocoa-touch