obj-c 关于指向函数的指针
本文关键字:指针 函数 于指 obj-c | 更新日期: 2023-09-27 18:37:24
我知道块可以传递给实例方法,该方法可以编写如下,
-(void)Method:((void) (^)(float)f)
{
f(0.5);
}
此外,此方法也是一个有效的表达式。
-(void)Method:((void) (*)(float)f)
{
f(0.5);
}
我想知道我可以传递给此方法什么?这有什么用?
此外,我想知道是否有以下 c# 代码的 obj-c 等效项?因为我想知道 obj-c 是否有函数指针。
public static float Sum(float x, float y)
{
return x+y;
}
public delegate float Operation(float x, float y);
public static Main()
{
Operation dSum = Sum;
Console.WriteLine(dSum(0.5, 1.5));
}
你的第二个 Objective-C 方法采用一个 C 函数指针,其寻址函数有一个float
作为输入,并且不返回任何内容。它与块相同:
typedef void (^ BlockType)(float);
- (void)blockMethod: (BlockType)block {
block(1.0);
}
[obj blockMethod:aBlock];
与。
typedef void (* FuncType)(float);
- (void)funcMethod: (FuncType)func {
func(1.0);
}
[obj funcMethod:aFunc];
区别在于函数无法捕获其周围状态(并且函数是函数,块是块)。
这不需要 Objective-C;你正在尝试做的事情可以很容易地翻译成直接的 C:
static float sum(float x, float y)
{
return x + y;
}
typedef float (*Operation)(float x, float y);
int main(int argc, char **argv)
{
Operation dSum = sum;
printf("%f'n", dSum(0.5, 1.5));
return 0;
}
这看起来应该都很容易辨认。