【发布时间】:2014-08-28 21:37:28
【问题描述】:
我已经将我的实现更改为不再这样做了,但我很想知道以下是否会导致问题 - 例如一个有多个步骤的流程,每个步骤都涉及传递对 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;
}
即使错误从未“使用”两次,这意味着下次将其引用传递给另一个方法时错误将为零(似乎),该引用是否会在任何步骤中以某种方式受到影响怎么办?
响应 jlehr 的 cmets 编辑前的原始代码:
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 所指的信息:
在处理通过引用传递的错误时,测试很重要 方法的返回值,看是否发生错误,如 如上所示。不要只是测试是否设置了错误指针 指向错误。
【问题讨论】:
-
根据 Apple 的文档,您永远不应该检查引用返回的
NSError对象;而是检查返回值。 -
有趣,你有链接到文档中的位置吗?检查返回值是什么意思?
-
没关系,我现在明白你说的返回值是什么意思了..脑子放屁..
标签: ios objective-c iphone reference nserror