c - 为什么 NSError 需要双重间接? (指向指针的指针)

这个概念似乎让我很困扰。为什么 NSError 对象需要将其指针传递给正在修改对象的方法?例如,不只是传递一个对错误的引用做同样的事情吗?

NSError *anError;
[myObjc doStuff:withAnotherObj error:error];

然后在doStuff中:

 - (void)doStuff:(id)withAnotherObjc error:(NSError *)error 
 {
    // something went bad!
    [error doSomethingToTheObject];
 }

为什么上述工作不像大多数其他对象消息传递模式那样工作?为什么我们必须使用 error:(NSError **)error?

最佳答案

很简单:

如果你将一个指向对象的指针传递给你的函数,函数只能修改指针所指向的内容。

如果你传递一个指向一个对象的指针,那么函数可以修改指针以指向另一个对象。

在 NSError 的情况下,该函数可能想要创建一个新的 NSError 对象并将一个指向该 NSError 对象的指针传回给您。因此,您需要双重间接,以便可以修改指针。

https://stackoverflow.com/questions/903103/

相关文章:

iphone - 如何删除应用程序指定目录中的所有文件?

iphone - UIBezierPath 减去路径

objective-c - 从 UIScrollView 中删除所有 subview ?

ios - 从 View 中删除所有子图层

objective-c - 分组的 UITableView 在底部有 20px 的额外填充

ios - 如何删除 xcode 5 中的旧配置文件?

objective-c - 奇怪的错误 NSAssert

iphone - 如何在 iPhone SDK 中使用自定义字体?

ios - 模态segue,导航栏消失

objective-c - 检测平移手势结束