执行以下代码段后,我的应用程序崩溃了(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];