Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对Objective-C中使用一个或多个星号感到困惑_Objective C_Variables_Asterisk - Fatal编程技术网

对Objective-C中使用一个或多个星号感到困惑

对Objective-C中使用一个或多个星号感到困惑,objective-c,variables,asterisk,Objective C,Variables,Asterisk,我正在读一本关于核心数据的书,在某种程度上,作者有这样一种验证方法: - (BOOL)validateRadius:(id *)ioValue error:(NSError **)outError { NSLog(@"Validating radius using custom method"); if ([*ioValue floatValue] < 7.0 || [*ioValue floatValue] > 10.0) { // Fill o

我正在读一本关于核心数据的书,在某种程度上,作者有这样一种验证方法:

- (BOOL)validateRadius:(id *)ioValue error:(NSError **)outError {
    NSLog(@"Validating radius using custom method");

    if ([*ioValue floatValue] < 7.0 || [*ioValue floatValue] > 10.0) { 
        // Fill out the error object 
        if (outError != NULL) {
            NSString *msg = @"Radius must be between 7.0 and 10.0";
            NSDictionary *dict = [NSDictionary dictionaryWithObject:msg forKey:NSLocalizedDescriptionKey];
            NSError *error = [[[NSError alloc] initWithDomain:@"Shapes" code:10 userInfo: dict] autorelease];
            *outError = error;
        }
        return NO;
    }
    return YES;
}
第二种是在方法调用的接收器上使用单个星号
*

[*ioValue floatValue]
这两样东西我以前都没见过,所以我想知道它们是关于什么的。大约6个月前刚开始iOS编程

欢迎对联机文档进行任何解释或指向联机文档的指针。

(id*)ioValue
表示
ioValue
是指向id的指针,而不是id本身。表达式
*ioValue
指的是
ioValue
指向的id

(NSError**)outError
表示
outError
是指向
NSError*
的指针(反过来,它又是指向
NSError
的指针)

以这种方式向函数传递指针的通常原因是允许函数向调用方返回某些内容

在上述情况下,函数可以为调用者传入的变量分配一个新的
id
*ioValue=something()
。然而,由于上述函数实际上并没有做到这一点,它似乎是多余的;它可以写成
(id)ioValue
,然后将其称为
ioValue
,而不是
*ioValue

然而,
outError
的情况非常合理。如果发生错误,函数将创建一个错误对象(
NSError*error=…
),并将其分配给传入的变量,因此:
*outError=error
。这样做的效果是更改调用者传入的原始变量,以便在函数返回时,调用者可以检查变量以查看产生的错误:

id ioValue = something();
IOError *err;
if ([foo validateRadius:&ioValue error:&err]) {
    NSLog("Yippee!");
} else {
    reportError(err);
}

考虑<代码> *恐怖=错误;<代码>显示了为什么“将指针传递给指针”(
**
)是有用的。+1但我认为这应该解释
*outError=error
以及它的工作原理(没有它,
NSError**
就很傻了。)@pst:同意。我怀疑你在我修改我的答案时添加了你的评论。
id ioValue = something();
IOError *err;
if ([foo validateRadius:&ioValue error:&err]) {
    NSLog("Yippee!");
} else {
    reportError(err);
}