Что эквивалентно (если есть) C ++ / Windows SendMessage () на Mac? - PullRequest
1 голос
/ 01 июня 2009

Существует ли эквивалентная функция для SendMessage в Mac OS?

Ответы [ 3 ]

6 голосов
/ 01 июня 2009

По иронии судьбы, каждый вызов метода в Objective-C является эквивалентом SendMessage. В основе Objective-C лежит система передачи сообщений.

Итак, вы просто говорите:

[window myMessage]

и подпрограмма myMessage будет выполнена, передав myMessage объекту Window и заставив его обработать этот метод ...

Также возможно, что ближе к тому, что вы действительно хотите сделать, это использовать уведомления для обмена сообщениями между компонентами.

Если у вас нет объекта Window во время компиляции, компилятор может жаловаться, что не знает, может ли Window обработать отправленное вами сообщение. Для этих случаев вы можете использовать:

[window performSelector:@selector(myMessage)]

Существуют альтернативные версии этого вызова, которые позволяют передавать объекты в качестве параметров.

1 голос
/ 01 июня 2009

Это зависит от того, какое сообщение вы будете отправлять с помощью SendMessage (). Например, большинство событий в Какао проходят через -[NSApplication sendEvent:] или SendEventToEventTarget(), если вы хотите версию более низкого уровня. Для других сообщений, таких как изменение размера, перемещение и т. Д., Вам необходимо обратиться к соответствующим методам NSWindow (например, -setFrame:animated:) или NSApplication.

Вообще говоря, вместо использования последовательности воронки и констант функций, как это делает SendMessage (), в Какао вы просто получаете соответствующий объект и вызываете его методы.

0 голосов
/ 01 июня 2009

На более высоком уровне, если вы говорите о Carbon Event Manager, вы бы использовали функцию 'SendEventToEventTarget'

См. http://developer.apple.com/documentation/Carbon/Reference/Carbon_Event_Manager_Ref/Reference/reference.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...