执行以下代码段后,我的应用程序崩溃了(iOS / iPhone):

    NSHTTPURLResponse *urlResponse = nil;
    NSError *error = [[NSError alloc] init];

    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];

    NSString *result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];


    if ([urlResponse statusCode] ==500 ) {

        ...

        }
    } else {
        NSLog(@"Response ==> status= %d", [urlResponse statusCode];
    }

    [result release];
    [error release];


在else语句处到达的代码,statusCode为“ 0”,并且该代码因
[CFError版本]发送到已释放实例的信息。我评论了
行[错误发布],然后再次发生当机。但是,我们在这里引入了泄漏。

错误变量出了什么问题?是否正在使用sendSynchonousRequest?

解决问题的最佳方法是什么?

最佳答案

传递给其他方法的错误对象通常不会初始化,如果错误发生,传递给它的方法将创建错误对象。由于此方法创建了错误对象,因此您不是该对象的所有者,因此您已经过度释放了错误。错误对象被创建为自动释放。

变更:

NSError *error = [[NSError alloc] init];




NSError *error = nil;


并删除

[error release];

10-06 12:39