NSApp隐藏了什么:实际上与NSWindow实例有关吗?

时间:2010-10-27 14:25:38

标签: objective-c cocoa macos nswindow nsapplication

我正在研究一个NSWindow子类,我遇到了一些奇怪的行为,这让我质疑我对Windows OS如何在Mac OS X上工作的一些假设。

调用NSWindow[[NSApplication sharedApplication] hide: self]个实例会发生什么?

所有未向-(BOOL)canHide返回NO的窗口将从屏幕上消失。然后,当应用程序变为活动状态或调用[NSApplication sharedApplication] unhide: self]时,所有窗口都会重新显示。

我曾假设这可以通过获取当前窗口状态的快照,然后在所有orderOut:个实例上调用NSWindow然后在unhide:orderOut:时向后执行整个操作来实现调用。

但是,情况似乎并非如此。我的NSWindow子类的setCanHide:方法未被调用..实际上它也没有被隐藏。它确实将{{1}}设置为YES但是......发生了什么?

非常感谢任何见解。

致以最诚挚的问候,

1 个答案:

答案 0 :(得分:2)

启动仪器并自行查找!在我的计算机(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