应该有一个非void返回值来指示是否发生了错误

时间:2012-01-30 12:23:26

标签: objective-c ios xcode

下面的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(从变量'加载)错误')。 感谢

2 个答案:

答案 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;
}