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));
}

obj-c 关于指向函数的指针

你的第二个 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;
}

这看起来应该都很容易辨认。