我正在编写一个使用NSXMLParser来解析网站信息然后将其存储在我的应用中的应用。我发布了我在@finally块中创建的解析器,但是Instruments仍然将其显示为内存泄漏。除此之外,应用程序的行为是完美的。这是代码:
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];
}
}
}
这可能是泄漏的原因吗?
答案 0 :(得分:0)
这是因为它可能在@finally
,当它正在检查它的最可能假设@finally
不会被调用,如果它在Build&amp; amp;中显示为泄漏分析,我会忽略它。
即使Apple建议发布@finally
:
- (void)doSomething {
NSMutableArray *anArray = nil;
array = [[NSMutableArray alloc] initWithCapacity:0];
@try {
[self doSomethingElse:anArray];
}
@finally {
[anArray release];
}
}