gpt4 book ai didi

objective-c - NSError * 与 NSError **

转载 作者:可可西里 更新时间:2023-11-01 03:07:54 24 4
gpt4 key购买 nike

我意识到这与此处的现有帖子相似,What's the Point of (NSError**)error? ,但我的问题有点不同。我了解双指针的工作原理,以及这是常见的 iOS API 错误模式。我的问题更多是关于单指针,以及为什么这段代码不起作用:

- (BOOL)someMethodWithError:(NSError *)error
{
...
if( errorOccured )
{
NSError *e = [[[NSError alloc] initWithDomain:@"" code:1 userInfo:nil] autorelease];
error = e;
return NO;
}

return YES;
}

实现使用:

NSError *error = nil;
if( ![someObj someMethodWithError:error] )
{
NSLog(@"Error: %@", [error localizedDescription]);
}

为什么方法实现中的赋值不将指针重新赋值给新的NSError对象?

最佳答案

我发现将指针仅视为整数会有所帮助。 (就是这样。)

用一个 int 看你的例子。

-(BOOL)someMethodWithError:(int)error
{
error =100;
return NO;
}

那个整数是按值传递的。调用该函数后,错误将不会改变。

   error  = 123;
[self someMethodWithError:error];
//error is = 123;

指针也是一样的东西。它是按值传递的。

  NSError * error; //this assigns this to a value in memory.
NSLog(@"%p",error);
[self someMethodWithError:error];
NSLog(@"%p",error); // the value of error will not have changed.

如果你想改变指针,你需要发送一个指向那个指针的指针并改变它。这很令人困惑,但请自己画一张内存图并考虑一下。 :)

关于objective-c - NSError * 与 NSError **,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9389502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com