访问GCController的游戏手柄时内存泄漏

时间:2014-12-04 00:41:50

标签: ios memory-leaks

我将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]但这似乎没有任何影响。这并不让我感到惊讶,因为我没有保留指针所以我不需要释放它。

有趣的是,这段代码在某些条件下运行良好。当我正在进行实施时,我设置了一个基本的测试,工作正常。当我尝试连接此库的现有跨平台单元测试时,问题才出现。以下是两个设置的更多细节:

  • (没有泄漏)我在applicationDidFinishLaunching中设置了我的InputSystem, 与displayLink一起调用每帧的功能。这个 函数将调用将调用上述内容的InputSystem代码 UpdateControllerState方法然后打印出任何新输入(按钮 检测到压力机等。这个设置很好;我看到了输入 我期待的控制器,内存使用保持良好和平坦。
  • (内存泄漏)为了更加严谨地测试,我迷上了 跨平台的InputSystem单元测试。这些测试包括 交互式模式,不断循环轮询和打印新的 投入。这并不能让iOS有机会接收输入和更新 GCController,所以我创建了一个新的线程 applicationDidFinishLaunching调用测试。这很有效 获取输入,但内存使用正在稳步增加。就像我一样 如上所述,评论新代码的部分帮助了我 将其缩小到上面突出显示的行。

我不明白为什么这两种设置以这种方式表现不同。任何帮助理解这个问题将不胜感激。我现在还不知道这是否是我使用GCController类的问题,或者我一般不了解iOS内存的问题。谢谢!

编辑:我刚刚尝试将指针存储到我的Controller对象中的extendedGamepad,所以我可以直接读取它并删除标有***的行。但是,在这种情况下,当我包含从按钮或拇指杆中读取值的行时,内存会泄漏。

0 个答案:

没有答案