我正在使用OpenGL和SDL处理一些跨平台代码,但在Mac OSX上立即遇到问题。
供参考,这里是GitHub上的代码库:https://github.com/GrooveStomp/platformer
我也推动了我在同一个回购中看到的错误:https://github.com/GrooveStomp/platformer/blob/master/errors.txt
现在,从读取I'已经做了,它好像SDL只是周围的Mac OSX&#39包; S Objective-C的可可层,我需要声明我自己的NSAutoreleasePool来包装我的整个程序。这是对的吗?
我刚刚看到这个链接:http://sourceforge.net/apps/wordpress/paintown/2010/12/26/sdl-and-osx/,其中作者从源代码安装并且没有任何问题。我使用Homebrew安装,我认为这相当于作者的第3步,因为我必须指定" -framework OpenGL"在建设时。
[编辑]
因此,事实证明应该通过以下三个步骤来处理NSAutoreleaseNoPool()问题:
结果是SDL将使用NSAutoreleasePool包装它自己的main()以及我的主要部分。但是,当我这样做时,我得到了这里显示的错误:
https://github.com/GrooveStomp/platformer/blob/master/make_errors.txt
答案 0 :(得分:1)
当您在没有安装NSAutoreleasePool的线程上发送Objective-C消息时,您会收到有关内存“Just Leaking”的消息。将整个程序包装在自动释放池中的问题是它永远不会耗尽,并且存在内存不足的风险。而是在事件循环开始时创建池,并在每次迭代结束时排空。这样做是正确的,应该修复所有“正在泄漏”错误。
由于NSAutorelasePool对象不是普通对象,因此它们的正确使用与几乎所有其他Cocoa对象略有不同。这是一个示例:
while(1)
{
NSAutoreleasePool* pool = [NSAutoreleasePool new];
// Do your event processing
[pool drain];
}