所以,我看到了这个:
error:(NSError **)error
在苹果文档中。为什么是两星?有什么意义?
最佳答案
“双星”是指向指针的指针。所以 NSError **
是一个指向 NSError
类型对象的指针。它基本上允许您从函数返回错误对象。您可以在函数中创建一个指向 NSError
对象的指针(称为 *myError
),然后执行以下操作:
*error = myError;
将该错误“返回”给调用者。
回复下面的评论:
您不能简单地使用 NSError *
,因为在 C 中,函数参数是按值传递的——也就是说,值是复制 当传递给函数时。为了说明,请考虑以下 C 代码片段:
void f(int x)
{
x = 4;
}
void g(void)
{
int y = 10;
f(y);
printf("%d\n", y); // Will output "10"
}
f()
中 x
的重新赋值不会影响 f()
之外的参数值(在 g( )
,例如)。
同样,当指针传入函数时,它的值会被复制,重新赋值不会影响函数外的值。
void f(int *x)
{
x = 10;
}
void g(void)
{
int y = 10;
int *z = &y;
printf("%p\n", z); // Will print the value of z, which is the address of y
f(z);
printf("%p\n", z); // The value of z has not changed!
}
当然,我们知道我们可以很容易地改变 z
所指向的值:
void f(int *x)
{
*x = 20;
}
void g(void)
{
int y = 10;
int *z = &y;
printf("%d\n", y); // Will print "10"
f(z);
printf("%d\n", y); // Will print "20"
}
所以按理说,要改变 NSError *
所指向的值,我们还必须传递一个指向该指针的指针。
https://stackoverflow.com/questions/604099/