Objective c 应具有非void返回值,以指示是否发生错误
嗨,下面的每个1是我的代码,我在其中得到内存泄漏。 我真的是处理内存泄漏新手,所以请善待我,即使它是一个简单的错误Objective c 应具有非void返回值,以指示是否发生错误,objective-c,ios,xcode,Objective C,Ios,Xcode,嗨,下面的每个1是我的代码,我在其中得到内存泄漏。 我真的是处理内存泄漏新手,所以请善待我,即使它是一个简单的错误 -(void) parseActivityData:(NSMutableData*) data parseError:(NSError **)error { NSXMLParser* parser = [[NSXMLParser alloc] initWithData:data]; [parser setDelegate:self]; [parser se
-(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的方法应该有一个非空的返回值来指示是否发生了错误”,另一个是null指针的DeDereference(从变量'error'加载)。
谢谢试试这样的方法:
-(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;
}
只要按要求做就行了。当您实际使用错误参数时,返回一个BOOL而不是void,该值设置为NO。也不要
[*错误保留]代码> > 考虑从--(无效)PARSEActuviyDATA(NSMTUBLeDATAB*)数据PARSEError(NSRROR**)错误的代码{这不会修复错误“方法接受NSError应该有一个非空返回值”。