0

一个名为 getTimerInterval 的函数返回一个 NSTimerInterval 值

-(NSTimeInterval *)getInterval {
    NSTimeInterval interval = 1;
    return interval;
}

Xcode 警告我

从具有不兼容结果类型“NSTimeInterval *”(又名“double *”)的函数返回“NSTimeInterval”(又名“double”);在“返回间隔”行中获取带有 &” 的地址

好吧,NSInteger 类型很好:

-(NSIntefer)getInteger {
    NSIntefer result = 1;
    return result;
}

以及直接返回号码:

 -(NSTimeInterval *)getInterval {
     return 1;
 }

好的,在那之后调用 getInterval 函数得到一个警告:

[NSTimer scheduledTimerWithTimeInterval:[self getInterval] target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];

将“NSTimeInterval *”(又名“double *”)发送到不兼容类型“NSTimeInterval”(又名“double”)的参数;取消引用 *

我对 & 和 * 感到困惑,我应该在哪里使用 & 或 *?那实际上是什么意思?
我只知道它是关于指针或其他东西的 c++ 语法,谢谢。

4

3 回答 3

2

为了修复编译器警告,您需要返回它的地址,如下所示:

-(NSTimeInterval *)getInterval {
    NSTimeInterval interval = 1;
    return &interval;
}

但是这很糟糕,因为您将返回方法堆栈帧上的地址,该地址在返回后消失。为什么不像这样返回它:

-(NSTimeInterval)getInterval {
    NSTimeInterval interval = 1;
    return interval;
}

我相信这也将解决您的其他编译器错误。

于 2012-07-04T15:52:01.053 回答
0

它是基本的 C(因此也是 Objective-c)语法,意思是“变量的地址”(&),以及相反的“地址处的值”(*)。该地址称为指针。有数百个网站非常详细地解释了这一点。

一个简单的例子:

NSInteger i=1;
NSInteger *ptr;

ptr = &i;

NSLog(@"The pointer %p points to value %d (which is equal to %d)",ptr,*ptr,i);
于 2012-07-04T15:49:55.140 回答
0

Objective-C 中的指针是内存的字面位,因此当您使用指针 (*) 传递一个值时,它的内存地址随之而来。另一方面,& 符号的字面意思是“地址”,通常用于原始数据类型变量,例如 int、BOOL、double 等,在我们希望方法修改变量本身的情况下(通常是它所指向的to as well) 并返回一个可用的值。NSError 相当一致地遵循这个逻辑。

于 2012-07-04T15:51:49.757 回答