Ale*_*lex 1 macos cocoa objective-c
我是一个完整的可可新手。
现在,我的简单 Hello World 应用程序在[NsApp run]
从 main()调用后阻塞。
我所需要的只是创建一个窗口而不是阻塞 main()。
我希望我的应用程序表现得像 glfw:
https://github.com/glfw/glfw/blob/master/src/cocoa_window.m#L1022
出于某种原因,它不会在那里阻塞。实际上,您可以删除此行,它仍然可以工作。
我一直在玩 glfw 源来弄清楚它们的不同之处。例如,[NsApp run]
如果我删除,则会阻止[NSApp setDelegate:_glfw.ns.delegate];
但不是这样。
根据苹果文档:
NSApplication 类在初始化期间和事件循环内部——特别是在其初始化(或共享)和 run() 方法中设置 @autorelease 块。
通常,应用程序在事件循环运行时或通过从 nib 文件加载对象来创建对象,因此缺乏访问权限通常不是问题。但是,如果您确实需要在 main() 函数本身中使用 Cocoa 类(除了加载 nib 文件或实例化 NSApplication),您应该创建一个 @autorelease 块来包含使用这些类的代码。
我想这就是我需要的,但我不知道如何使用 @autorelease 块。
谢谢你的帮助。
我想到了。
GLFW 实现了自己的事件循环,因此不需要调用 [NSApp run]:
NSEvent *event = [NSApp nextEventMatchingMask:NSEventMaskAny
untilDate:[NSDate distantFuture]
inMode:NSDefaultRunLoopMode
dequeue:YES];
[NSApp sendEvent:event];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
874 次 |
最近记录: |