Kie*_*ran 3 iphone cocoa memory-leaks memory-management objective-c
静态分析器在这段代码中显示泄漏(特别是与其中的副本的链接):
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"item"])
{
[elements setObject:title forKey:@"title"];
[elements setObject:date forKey:@"date"];
[elements setObject:summary forKey:@"summary"];
[elements setObject:link forKey:@"link"];
[posts addObject:[elements copy]];
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试释放复制的对象,但我仍然收到警告.我错过了什么吗?
谢谢
您创建了未发布的新副本.
这将返回elements带有引用计数1的新对象,由于您刚刚创建了一个副本,因此您负责解除分配:
[elements copy];
Run Code Online (Sandbox Code Playgroud)
在此行中,您将新创建的副本添加到posts集合中.所有集合都保留新值,因此您使用引用计数1传递新副本,并且通过保留它将帖子数增加到2.
[posts addObject:[elements copy]];
Run Code Online (Sandbox Code Playgroud)
在释放时posts将发送到每个元素release,这将减少ref count为1,因此elements不会被释放,最终导致内存泄漏.
删除copy并查看是否有帮助:
[post addObject:elements];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
296 次 |
| 最近记录: |