我已经将我的实现改为而不是这样做了,但我有兴趣知道以下是否会导致问题 - 例如,一个包含多个步骤的流程,每个步骤都涉及到对NSError对象的引用。如果您在此过程中的每一步都重复使用此错误对象,那么该引用是否会以某种方式受到负面影响,可能会导致某种内存管理/ dealloc崩溃?
NSError *error;
NSData *data = [NSJSONSerialization dataWithJSONObject:object options:0 error:&error];
if (!data) {
return error;
}
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if (!responseData) {
return error;
}
NSDictionary *resultDictionary = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&error];
if (!resultDictionary) {
return error;
}
即使错误永远不会被使用"两次,意味着错误将是nil(似乎)下次将其引用传递给另一个方法时,引用是否可以在某个步骤中以某种方式实现?
编辑之前的原始代码以回应jlehr的评论:
NSError *error;
NSData *data = [NSJSONSerialization dataWithJSONObject:object options:0 error:&error];
if (error) {
return;
}
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if (error) {
return;
}
NSDictionary *resultDictionary = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&error];
if (error) {
return;
}
编辑:对于稍后来到这里的人来说,jlehr所指的信息可以在这里找到:
在处理通过引用传递的错误时,测试很重要 方法的返回值,以查看是否发生错误,如 如上所示。不要只是测试是否设置了错误指针 指出错误。
答案 0 :(得分:3)
根据Apple的文档,您永远不应该检查引用返回的NSError
对象。而是检查您正在调用的init...
方法或工厂方法的返回值,例如:
NSError *error;
NSData *data = [NSJSONSerialization dataWithJSONObject:object options:0 error:&error];
if (data == nil) {
// Handle failure. It's safe to use the error object here.
}
但是,您的代码似乎没有对NSError
实例执行任何操作(例如,记录或显示警报),因此您只需传递NULL
。
NSData *data = [NSJSONSerialization dataWithJSONObject:object options:0 error:NULL];
if (data == nil) {
// Handle failure.
}