Mac OS中是否有与SendMessage相同的功能?
答案 0 :(得分:6)
具有讽刺意味的是,Objective-C中的每个方法调用都相当于SendMessage。 Objective-C的核心是消息传递系统。
所以你只要说:
[window myMessage]
并通过将myMessage传递给Window对象并让它处理该方法来执行myMessage例程......
您可能更接近于您真正想做的事情是使用通知在组件之间发送消息。
如果在编译时没有Window对象,编译器可能会抱怨它不知道Window是否可以处理您发送的消息。对于这些情况,您可以使用:
[window performSelector:@selector(myMessage)]
此调用的备用版本允许将对象作为参数传递。
答案 1 :(得分:1)
这取决于您使用SendMessage()发送的消息。例如,Cocoa中的大多数事件都会通过-[NSApplication sendEvent:]
或SendEventToEventTarget()
,如果您想要更低级别的版本。对于其他消息,例如调整大小,移动等,您需要查看NSWindow的适当方法(例如-setFrame:animated:
)或NSApplication。
一般来说,不是像SendMessage()那样使用漏斗程序和函数常量,而是在Cocoa中只需掌握相关对象并调用其方法。
答案 2 :(得分:0)
在更高级别,如果您正在谈论Carbon Event Manager,您将使用“SendEventToEventTarget”函数