1

我知道这听起来很傻,但只是为了澄清一点。是否有可能在 didBecomeActive 之前调用视图确实加载?这完全不可能吗?

编辑

当用户从后台返回应用程序并且我们开始使用 openGL 时,我们会发生崩溃。我们尝试在后台使用openGL的崩溃错误点。

重要的是,我们的应用程序作为 VOIP 应用程序存在于后台。

我们试图弄清楚是否有可能我们在后台触发了某些东西,这会导致应用程序在后台重新启动 openGl。

在堆栈中,我们看到:

[VideoCallViewController viewDidLoad] (VideoCallViewController.m:283)

之后几行:

[GPUImageContext createContext]

最后:

gpus_ReturnNotPermittedKillClient + 10

我们试图弄清楚是否有一种方法[VideoCallViewController viewDidLoad]在后台被调用,或者我们必须假设我们在前台,并且在viewDidLoad?之后以某种方式移动到后台。

第二种选择 第二种选择是我们确实在viewDidLoad. 这里的重点是我们正在监听 AppWillResignActive 并且我们暂停了 GPUIMage。所以我们无法理解为什么会发生崩溃?

谢谢

谢谢

4

1 回答 1

0

您何时/在哪里实例化您正在使用的各种 GPUImage 对象?它是在 viewDidLoad 内还是可能在 init: 内?

这只是纯粹的疯狂猜测,因为你并没有真正发布任何代码......

但是如果您在应用程序进入后台时处理对象,当它返回前台时不会重新创建(可能是因为 viewController 被父级保留,因此 init: 没有再次调用但 viewDidLoad 是...)然后您可能会尝试将 OpenGL 消息发送到实际上不再存在的对象。

如果我的推测是正确的(可能不太可能),您可以使用以下常见的“getter”模式轻松修复它:

- (GPUImageObjectOfInterest*)instanceOfObject {
    if (!_classVariableOfThisType) {
        _classVariableOfThisType = [[GPUImageObjectOfInterest alloc] init];
        // custom configuration, etc...
       }

    return _classVariableOfThisType;
}

然后使用 [self instanceOfObject]; 你曾经使用 _classVariableOfThisType 的任何地方

这是确保关键对象存在于各种应用程序中断/后台和前台以及低内存条件下的一种低开销但相当简单的方法。

不过不要羞于发布太多代码,如果需要,我们可以通读整个课程。我们中的一些人喜欢阅读代码!(它真的会帮助您获得响应的质量......)

于 2013-10-24T04:14:15.710 回答