什么是寄件人?

时间:2010-05-16 04:56:47

标签: objective-c cocoa

我无法在任何地方找到这个答案。当方法头中有sender参数时,它是什么意思?它是代表调用它的实例,还是调用它的方法?

3 个答案:

答案 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 GuideControl 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,并随之显示该按钮可用的所有信息。 大小,文字等

希望这已经足够了。

布赖恩