我是一个完整的Cocoa新手。
现在我的简单Hello World应用程序在从main()调用io.Reader
后阻止。
我只需创建一个窗口而不是阻止main()。
我希望我的应用程序表现得像glfw:
出于某种原因,它并没有阻止那里。实际上,您可以删除此行,它仍然有效。
我一直在玩glfw来源,弄清楚他们的做法有多么不同。例如,如果我删除[NsApp run]
[NsApp run]
阻止
但那不是。
根据{{3}}:
NSApplication类在设置期间设置@autorelease块 初始化和事件循环内部 - 特别是在其中 初始化(或共享)和run()方法。
通常,应用程序在事件循环时创建对象 运行或通过从nib文件加载对象,因此缺乏访问权限 通常不是问题。但是,如果您确实需要使用Cocoa类 在main()函数本身内(除了加载nib文件或 实例化NSApplication),你应该创建一个@autorelease块 包含使用类的代码。
我想这就是我需要的,但我不知道如何使用@autorelease块。
感谢您的帮助。
答案 0 :(得分:1)
我明白了。
GLFW实现了自己的事件循环,因此不需要调用[NSApp run]:
NSEvent *event = [NSApp nextEventMatchingMask:NSEventMaskAny
untilDate:[NSDate distantFuture]
inMode:NSDefaultRunLoopMode
dequeue:YES];
[NSApp sendEvent:event];
答案 1 :(得分:0)
我刚刚遇到了同样的情况。 我发现了一些不同的解决方案。
只需调用[[NSApplication sharedApplication] run];
,并在创建窗口后调用[[NSApplication sharedApplication] stop:nil];
,run
调用将立即退出。然后您仍然可以调用sendEvent方法。