3

我仍在学习 Objective-C,但我想知道我所学的一切背后的“原因”。

我想知道为什么Objective-C方法要求将类型括在括号中,例如:

- (IBAction) myAction: (UIButton *) sender;

代替:

- IBAction myAction: UIButton *sender;

我已经尝试寻找答案并考虑了很多,但似乎看不出原因是什么。

困扰我的是有时我实际上忘记了星号 ( *) 需要在括号内,有时我不小心输入了以下错误的签名:

- (IBAction) myAction: (UIButton) *sender;

对我来说,这更合乎逻辑地表示参数是指针,而不是类型。

4

1 回答 1

4

那是 C 转换语法:

int foo = (int)bar;

将其视为将参数和返回值转换为特定类型。

在 Objective-C 的早期,返回值和参数默认为id类型。所以你会看到这样的方法声明:

-myAction:sender;

由于许多原因,在 Objective-C 代码中强类型化返回值和参数变得更可取,以至于所有返回值和参数都是强类型化的,即使它们是id

- (IBAction)myAction:(id)sender;

星号也是 C 语法。 UIButton*是一种特定类型,不同于UIButtonUIButton**。你可以这样做:

typedef UIButton* UIButtonRef;

然后使用UIButtonRef而不是UIButton*

- (IBAction)myAction:(UIButtonRef)sender;
于 2012-12-13T05:55:52.470 回答