我将iOS GameController Framework的支持添加到跨平台输入库,并且遇到内存泄漏问题。这是麻烦的代码的简化版本:
void InputSystem::UpdateControllerState(size_t nControllerIndex)
{
Controller& c = mController[nControllerIndex];
GCController* gc = c.mGameController;
GCExtendedGamepad* gp = [gc extendedGamepad]; // ***
c.mState[kIOSThumbLX] = gp.leftThumbstick.xAxis.value;
c.mState[kIOSThumbLY] = gp.leftThumbstick.yAxis.value;
// ... etc
}
内存泄漏似乎是由标有***的行引起的。我可以注释掉从控制器读取值的行和内存仍然泄露(在某些情况下;这可能是关键)。我已尝试在函数末尾添加[gc release]但这似乎没有任何影响。这并不让我感到惊讶,因为我没有保留指针所以我不需要释放它。
有趣的是,这段代码在某些条件下运行良好。当我正在进行实施时,我设置了一个基本的测试,工作正常。当我尝试连接此库的现有跨平台单元测试时,问题才出现。以下是两个设置的更多细节:
我不明白为什么这两种设置以这种方式表现不同。任何帮助理解这个问题将不胜感激。我现在还不知道这是否是我使用GCController类的问题,或者我一般不了解iOS内存的问题。谢谢!
编辑:我刚刚尝试将指针存储到我的Controller对象中的extendedGamepad,所以我可以直接读取它并删除标有***的行。但是,在这种情况下,当我包含从按钮或拇指杆中读取值的行时,内存会泄漏。