我无法在任何地方找到这个答案。当方法头中有sender参数时,它是什么意思?它是代表调用它的实例,还是调用它的方法?
答案 0 :(得分:4)
方法标题中有sender参数是什么意思?它是代表调用它的实例,还是调用它的方法?
查看参数的类型。机会是,id
。这是对象指针的类型。你是正确的,它是发送消息的实例。
您可以将消息选择器传递给消息,但其类型为SEL
,而不是id
。同样,您可以将方法实现传递给消息,但其类型为IMP
,而不是id
。
采用单个sender
参数的方法通常是操作方法,通常由IBAction
返回类型标识。正如zoul所说,IBAction
扩展为编译器的void
,告诉它该方法不返回值。拥有IBAction
的原因是Interface Builder会查找具有IBAction
作为返回类型的方法,并将它们检测为可以将控件连接到的操作。
有关Cocoa(Mac OS X)的更多信息,请参阅“The Target-Action Mechanism” in the Cocoa Fundamentals Guide和Control and Cell Programming Topics for Cocoa。
有关Cocoa Touch(iPhone / iPod touch / iPad)的更多信息,请参阅“The Target-Action Mechanism” in the UIControl class reference。
答案 1 :(得分:3)
没有任何魔法。您可能正在讨论Interface Builder链接到某些用户界面元素的方法,对吧?
- (IBAction) userDidPressButton: (id) sender {...}
IBAction是一个扩展到无效的宏。它只是一个语法糖,它标记了您希望在Interface Builder中可用的方法。现在,当您将此方法连接到某个界面元素(例如按钮)时,IB会在按钮上调用addTarget ...方法:
[button addTarget:yourObject action:@selector(userDidPressButton:) forEvent:...];
当你按下按钮时,它会浏览其动作列表并触发userDidPressButton,将自己作为第一个参数传递。这可能对按钮没那么有用,但您也可以使用相同的机制从滑块获取更改事件,在这种情况下,您可以使用sender参数来获取滑块值。
答案 2 :(得分:1)
当然,有很多技术方法来描述这个, 但是在'不,'理论中,它传递的发送者参数只是传递它的GUI对象。
因此,如果您将此方法与特定按钮相关联,我们将调用Button1,发件人为Button1,并随之显示该按钮可用的所有信息。 大小,文字等
希望这已经足够了。
布赖恩