下面的every1是我的代码,我的内存泄漏。 我是处理内存泄漏的新手,所以即使是一个简单的bug,也请对我好一点。
-(void) parseActivityData:(NSMutableData*) data parseError:(NSError **)error
{
NSXMLParser* parser = [[NSXMLParser alloc] initWithData:data];
[parser setDelegate:self];
[parser setShouldProcessNamespaces:NO];
[parser setShouldReportNamespacePrefixes:NO];
[parser setShouldResolveExternalEntities:NO];
[parser parse];
NSError *parseError = [parser parserError];
if (parseError && error) {
*error = parseError;
}
[*error retain];
[parser release];
}
对于这段代码我得到的内存泄漏问题是“接受NSError的方法应该有一个非void返回值来指示是否发生了错误”而另一个是空指针的DeDereference(从变量'加载)错误')。 感谢
答案 0 :(得分:6)
只需按要求执行操作即可。返回BOOL而不是在实际使用错误参数时设置为NO的void。也不要[*error retain];
。
答案 1 :(得分:0)
尝试这样的事情:
-(BOOL) parseActivityData:(NSMutableData*) data parseError:(NSError **)error
{
NSXMLParser* parser = [[NSXMLParser alloc] initWithData:data];
[parser setDelegate:self];
[parser setShouldProcessNamespaces:NO];
[parser setShouldReportNamespacePrefixes:NO];
[parser setShouldResolveExternalEntities:NO];
BOOL success = [parser parse];
// only assign error if parser FAILED
if(success == NO)
{
// error should be autoreleased... no need to retain
*error = [parser parserError];
// if the above line doesn't work (if error also releases
// when you release the parser object), then take out the above
// line of code and uncomment this line below:
//
// *error = [[parser parserError copy];
//
// the above line makes a retained copy of the error, which
// you must release in the caller.
}
return success;
}