为什么 IBAction 的发送者类型必须是 id?
Why does an IBAction's sender type have to be id?
我正在使用 "Cocoa Programming For Mac OS X right now (the Objective-C edition)" 学习 Cocoa,每当我使用 Interface Builder 创建按钮时,我都必须将它与我目前正在使用的 classes 之一连接起来.
当我控制从按钮单击并拖动到我的 AppDelegate.h 文件时,Xcode 会自动将按钮挂接到我的 AppDelegate class。如果我选择 "Action" 它将创建一个这样的方法:
- (IBAction)onButtonPress:(id)sender {
}
Objective-C的方法是这样的:
- (returnType)methodName:(typeOfFirstArgument)firstArgumentName (typeOfSecondeArgument)secondArgumentName
为什么我必须为发件人使用类型 id
而不是 NSButton
?我知道我用一个按钮连接了这个方法。因此,我希望发件人是 NSButton
.
类型的对象
我试过了,但没用。
回答:它不一定是一个 ID,如果您查看弹出的小对话框 select "Action" 并命名处理程序,您会发现您可以 select 对象的实际类型,在您的示例中为 NSButton。
类型不必是 id
。您绝对可以更改参数的类型和名称,可以在创建连接时使用弹出窗口,也可以在代码中更改。
id
是一个类型,意思是"pointer to any ObjC object"。指向特定 class 的指针同样有效:
- (IBAction)onButtonPress:(NSButton *)importantButton;
我正在使用 "Cocoa Programming For Mac OS X right now (the Objective-C edition)" 学习 Cocoa,每当我使用 Interface Builder 创建按钮时,我都必须将它与我目前正在使用的 classes 之一连接起来.
当我控制从按钮单击并拖动到我的 AppDelegate.h 文件时,Xcode 会自动将按钮挂接到我的 AppDelegate class。如果我选择 "Action" 它将创建一个这样的方法:
- (IBAction)onButtonPress:(id)sender {
}
Objective-C的方法是这样的:
- (returnType)methodName:(typeOfFirstArgument)firstArgumentName (typeOfSecondeArgument)secondArgumentName
为什么我必须为发件人使用类型 id
而不是 NSButton
?我知道我用一个按钮连接了这个方法。因此,我希望发件人是 NSButton
.
我试过了,但没用。
回答:它不一定是一个 ID,如果您查看弹出的小对话框 select "Action" 并命名处理程序,您会发现您可以 select 对象的实际类型,在您的示例中为 NSButton。
类型不必是 id
。您绝对可以更改参数的类型和名称,可以在创建连接时使用弹出窗口,也可以在代码中更改。
id
是一个类型,意思是"pointer to any ObjC object"。指向特定 class 的指针同样有效:
- (IBAction)onButtonPress:(NSButton *)importantButton;