2

我无法从我正在处理的 iPhone 应用程序中删除泄漏。我正在解析 xml 提要以获取数据。这是我用来解析的代码

[[NSURLCache sharedURLCache] setMemoryCapacity:0];
    [[NSURLCache sharedURLCache] setDiskCapacity:0]; 
    NSData *xml = [NSData dataWithContentsOfURL: [NSURL URLWithString:@"url link"]];
    self.parser = [[NSXMLParser alloc] initWithData:xml];   


[self.parser setDelegate:self];
[self.parser parse];
[self.parser release];
self.parser=nil;

以及解析代码

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { if(![elementName compare:@"item"])
{tempElement = [[XMLElement alloc] init];
}
else if(![elementName compare:@"title"])
{
    self.currentAttribute = [NSMutableString string];
}

else if(![elementName compare:@"link"])
{
    self.currentAttribute = [NSMutableString string];
}
else if(![elementName compare:@"comments"])
{
    self.currentAttribute = [NSMutableString string];
}
else if(![elementName compare:@"pubDate"])
{
    self.currentAttribute = [NSMutableString string];
}
else if(![elementName compare:@"category"])
{
    self.currentAttribute = [NSMutableString string];
}

else if(![elementName compare:@"description"])
{
    self.currentAttribute = [NSMutableString string];
}}

我每个人都有泄漏

self.currentAttribute = [NSMutableString string];

和上

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{NSString *strAppend = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
if ([strAppend length] > 0) {
    [self.currentAttribute appendString:string];
}

}

任何帮助表示赞赏。提前致谢

4

2 回答 2

1

如果您的属性被保留,如下所示:

@property (nonatomic, retain) NSXMLParser * parser;

...然后他们被保留了两次。所以一个版本不会这样做。你可以像这样设置它们:

NSXMLParser *tempParser = [[NSXMLParser alloc] initWithData:xml];
self.parser = tempParser;
[tempParser release];

然后用 self.parser 做任何你需要的事情。然后在你的 dealloc 方法中,你释放它。由于这种方式保留计数为 1(原始 alloc 保留已通过 tempParser 释放),因此一个版本应该这样做:

- (void) dealloc {
[parser release];
[super dealloc];
}

另外,如果每种可能性都具有相同的结果,为什么您会费心编写 if-else 语句,我对此感到困惑。

于 2011-03-05T07:00:10.610 回答
0

非常感谢,但我没有在我的对象类中调用 dealloc 函数。添加此函数并使用 [self.mystring release] 释放所有字符串解决了问题

于 2011-07-08T14:34:19.880 回答