嘿,我的应用程序有一些问题。这是我的第一个 IOS 大项目,到目前为止,我一直做得很好,有些部分在这里和那里遇到了麻烦。但是现在开发基本上结束了,我遇到了最大的问题,它一直困扰着我一段时间,我已经碰壁了。我还不确定该怎么做(我有一个想法,但不确定这是否可行)。在我的电脑上,它大部分时间都可以工作。有时它
崩溃,我得到一个错误(见下文)。当我收到错误时,我所做的通常是游戏正在运行,然后突然停止。实际上,我已经有一段时间没有收到该错误了,而且我大多是在开发时得到它。当应用程序在我老板的机器或实际设备上运行时(旁注,我们将应用程序从她的机器上传到设备而不是从我的机器上),它崩溃了。它总是在同一点崩溃。出现第一个视图,即标题屏幕。然后他们单击开始按钮并启动一个新视图。但是,他们单击开始按钮,应用程序最终崩溃。发生的情况是应用程序关闭并且调试器转到这部分代码。
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class]));
}
}
此外,该应用程序是一个游戏。所有视图都使用 OpengelE。我在想正在发生的事情是使用了太多内存。游戏正在运行;系统需要更多内存,系统杀死进程释放内存;该过程是应用程序。这是基于我对 IOS 和应用程序生命周期的了解。我正在使用 ARC,但我已经使用他们的工具专门测试了游戏,我没有发现任何可能导致问题的内存泄漏或类似的事情。我认为该图像可能是明智的大文件大小。图像范围从 100kb 到 5 MB。我们正在缩小它们的尺寸,但我不确定这是否是问题所在。现在我唯一知道它为什么会崩溃的原因是它内存不足,而我发现的唯一原因是文件大小。我不是 100% 确定这是原因,因为它没有解释为什么它在我的机器上没有崩溃(至少最近没有),但它在她身上发生了(它解释了为什么它对她的机器和设备如此,它解释了为什么它有时会发生在我的身上,而不是它们发生在不同的条件下)。此外,我一直听说在这种情况下应该会出现某种类型的低内存警告。有人可以确认否认吗(我对此进行了研究,但没有发现很多
所以我要问的是,是否有人可能对这个问题的原因有更多建议,或者至少引导我进入我应该更多研究的主题。你认为降低图像的文件大小会起作用吗?往往有 1 个大约 1-3 的背景,然后是 8 到 40 个 100kb 的图像。
编辑 我使用了配置文件模式仪器。该应用程序开始使用 100mb,然后在播放时增加到 500mb(这是在真实内存中)。我注意到只有当我切换到新级别时它才会增加内存。我想这是因为每个级别都有更多的图像显示,但后来我做了一个测试。在测试中,当一个级别完成时,而不是进入下一个级别,再次播放级别一个。每个级别都是 Class Level 的一个对象。我的 ViewControler(它是 GLKViewController 的子类)有一个名为 currentLevel 的属性。游戏使用以下代码切换到下一个级别:
-(void) nextLevel: (Level) newLevel
{
//play sound
MyAppDelage *del=[[UIApplication sharedApplication] delegate];
UIWindow *main=[delegate window];
MyViewControler *view=(MyViewControler*) main.rootViewController;
view.currentLevel=newLevel;
}
所以我认为正在发生的是旧关卡由于某种原因永远不会被垃圾收集;如果这有什么不同,currentLevel 就很强大。我也有@synthesize currentLevel =_currentLevel; 这是我第一次学习Objective C时编写的非常古老的代码。当时我只是在学习示例。可能更改强类型或删除 @synthesize 部分会帮助解决这个问题吗?我习惯了更多的 C++/C#/Java 语法,所以我真的不习惯一些客观的 C 风格。