Что скрывает NSApp: на самом деле делать с экземплярами NSWindow? - PullRequest
1 голос
/ 27 октября 2010

Я работаю над подклассом NSWindow и сталкиваюсь с некоторым странным поведением, которое заставляет меня усомниться в некоторых моих предположениях о том, как работают окна в Mac OS X.

Что именно происходит с NSWindow случаи, когда вызывается [[NSApplication sharedApplication] hide: self]?

Все окна, которые не возвращают NO к -(BOOL)canHide, исчезают с экрана.Затем все окна вновь появляются, когда приложение становится активным или вызывается [NSApplication sharedApplication] unhide: self].

Я предполагал, что этого можно было бы сделать, сделав снимок текущего состояния окна, а затем вызвав orderOut: для всех NSWindow экземпляров и затем выполнение всего этого в обратном порядке, когда вызывается unhide:.

Однако, похоже, это не так.Метод orderOut: моего подкласса NSWindow не вызывается .. фактически он также не скрыт.Он устанавливает setCanHide: на ДА, хотя .. что происходит?

Любые идеи будут очень признательны.

С уважением,

Фрэнк

1 Ответ

2 голосов
/ 27 октября 2010

Запустите инструменты и узнайте сами!На моей машине (10.6.4) и 32-битном приложении [NSApplication hide:] вызывает ShowHideProcess.Там задокументировано:

http://developer.apple.com/library/mac/#documentation/Carbon/Reference/Process_Manager/process_mgr_ref.pdf

Затем ShowHideProcess вызывает CPSPostHideReq ( что-то в CoreGraphics ).

Но нетorderOut: на самом деле нет objc_msgSend().

Для чего он вам нужен?Или вам просто любопытно?Потому что в большинстве случаев, вы должны просто прекрасно слушать NSApplicationWill/DidHideNotification.

...