fba*_*ipe 7 c c++ macos objective-c
我有用C++编写的多平台游戏.在mac版本中,即使我没有任何obj-c代码,我使用的其中一个库似乎是自动释放的东西,我得到内存泄漏,因为我没有创建NSAutoreleasePool.
我想要的是能够在不使用obj-c代码的情况下创建(并销毁)NSAutoreleasePool,因此我不需要创建.m文件,只需更改我的构建脚本.那可能吗?怎么办?
OBS:Tagged C和C++,因为任何一种语言的解决方案都可以.
您无法避免实例化 Objective-C 运行时\xe2\x80\x94,但显然您已经拥有其中之一。
\n\n如果您想与 C 运行时交互,可以使用 Objective-C 运行时 API,如Objective-C 运行时编程指南和Objective-C 运行时参考中所述。
\n\n这个想法是这样的(未经测试):
\n\n#include <objc/runtime.h>\n#include <objc/objc-runtime.h>\nid allocAndInitAutoreleasePool() {\n Class NSAutoreleasePoolClass = objc_getClass("NSAutoreleasePool");\n id pool = class_createInstance(NSAutoreleasePoolClass, 0);\n return objc_msgSend(pool, "init");\n}\nvoid drainAutoreleasePool(id pool) {\n (void)objc_msgSend(pool, "drain");\n}\nRun Code Online (Sandbox Code Playgroud)\n\n如果您想从另一个文件调用这些函数,当然您还必须在其中包含 objc/runtime.h。或者,您可以在 allocAndInit 函数的返回中将 id 强制转换为 void*,并在排出函数中采用 void* 并强制转换回 id。(您也可以前向声明 struct objc_object 和 typedef struct objc_object *id,但我相信实际上并不能保证是正确的定义。)
\n\n您不必在链接命令中传递 -lobjc 。
\n\n不用说,仅仅让构建脚本处理 .m 文件可能会减少工作量。
\n| 归档时间: |
|
| 查看次数: |
807 次 |
| 最近记录: |