内存泄漏与NSXMLParser
问题描述:
我正在写一个应用程序,它使用NSXMLParser来解析来自网站的信息,然后将其存储在我的应用程序中。我发布了我在@finally块中创建的解析器,但Instruments仍将其显示为内存泄漏。除此之外,应用程序的行为非常完美。这里的代码:内存泄漏与NSXMLParser
NSXMLParser *myParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL]; //<--memory leak
@try {
if (myParser != nil)
{
[myParser setDelegate:self];
[myParser setShouldProcessNamespaces:NO];
[myParser setShouldReportNamespacePrefixes:NO];
[myParser setShouldResolveExternalEntities:NO];
}
[myParser parse];
}
@catch (NSException * e) {
NSLog(@"%@, %@",[e name], [e reason]);
}
@finally {
[xmlURL release];
[myParser release];
}
任何建议为什么这显示为内存泄漏?
**编辑* * *
下面是委托方法我已经在我的代码实现:
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI
(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString:@"Cube"])
{
if ([attributeDict objectForKey:@"time"])
{
NSArray *pathsArray =
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [pathsArray objectAtIndex:0];
NSString *timePlistPath = [NSString stringWithString:
[path stringByAppendingString:@"/time.plist"]];
NSString *TimeString = [attributeDict objectForKey:@"time"];
[TimeString writeToFile:timePlistPath atomically:YES
encoding:NSUnicodeStringEncoding error:nil];
}
if ([attributeDict objectForKey:@"currency"] && [attributeDict objectForKey:@"rate"])
{
NSString *currencyObject = [attributeDict objectForKey:@"currency"];
NSString *rateObject = [attributeDict objectForKey:@"rate"];
[mAryCurrency addObject:currencyObject];
[mAryRates addObject:rateObject];
}
}
}
难道这是原因的泄漏?
答
这是因为它在@finally
可能是在检查它最有可能假设时@finally
不会被调用,如果它显示为Build &分析中的泄漏,我会忽略它。
即使苹果建议用户在@finally
释放:
- (void)doSomething {
NSMutableArray *anArray = nil;
array = [[NSMutableArray alloc] initWithCapacity:0];
@try {
[self doSomethingElse:anArray];
}
@finally {
[anArray release];
}
}
+0
@ finalally { [xmlURL release]; [myParser发布]; } - 你见过吗? – Max 2011-02-28 01:21:21
一切都在你的贴码是否正确。这可能是NSXMLParserDelegate回调中的一些东西。尝试在这些方法中评论代码并查看泄漏是否仍然存在。 – Max 2011-02-28 01:23:42