我一直在尝试调试此错误,但我找不到问题。根据我的研究,我认为这告诉我,我正在尝试释放一个已经真正缓解的对象,尽管我不确定。我有一个对象作为NSXMLParser对象的委托,我有一个类型NSMutableString
的属性,我用它来保存每个元素的字符。这是我的代码:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
self.stringBuffer = [NSMutableString string];
if ([elementName isEqualToString:@"item"])
self.parsingPodcast = YES;
if (attributeDict)
self.currentAttributesDict = attributeDict;
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if (string) [self.stringBuffer appendString:string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if (self.parsingPodcast)
{
if ([elementName isEqualToString:@"title"])
{
self.currentPodcastObject.title = self.stringBuffer;
}
else if ([elementName isEqualToString:@"pubDate"])
{
self.currentPodcastObject.publishDate = self.stringBuffer;
}
else if ([elementName isEqualToString:@"summary"])
{
self.currentPodcastObject.summary = self.stringBuffer;
}
else if ([elementName isEqualToString:@"imageurl"])
{
self.currentPodcastObject.imgURL = self.stringBuffer;
}
else if ([elementName isEqualToString:@"enclosure"])
{
self.currentPodcastObject.audioURL = [self.currentAttributesDict objectForKey:@"url"];
self.currentPodcastObject.audioType = [self.currentAttributesDict objectForKey:@"type"];
}
else if ([elementName isEqualToString:@"itunes:duration"])
{
self.currentPodcastObject.duration = self.stringBuffer;
}
else if ([elementName isEqualToString:@"item"])
{
parserCompletionBlock(self.currentPodcastObject);
}
}
}
我在计划中启用了僵尸,并使用僵尸工具尝试找到任何过度释放的对象,但我找不到任何东西。这是控制台上的输出
:malloc: *** error for object 0x10e7531f0: double free
*** set a breakpoint in malloc_error_break to debug
我添加了malloc_error_break
断点
断点在self.stringBuffer
属性的setter方法上停止。谁能帮我吗?我肯定错过了什么。在此先感谢您的帮助!
答案 0 :(得分:1)
[NSMutableString string]是自动释放。在self.stringBuffer上分配它时你应该保留。
self.stringBuffer = [NSMutableString string] retain]
答案 1 :(得分:0)
我实际上遇到了这个错误,因为手机中的内存几乎已满。一旦我清除了手机中的某些应用程序,错误便消失了。不确定这是否有用,但它确实对我有所帮助。