2011-11-03 139 views
1

我的iPhone应用程序正在疯狂地崩溃。我需要一些帮助,或真正的方向。iPhone应用程序内存问题。由于内存不足导致崩溃?

快速背景:我不知道如何编程。我只做了几个月,我很确定我没有以最好的方式制作这款应用,甚至关闭。

该应用程序基本上是一个包含10个按钮的菜单屏幕。每个按钮导致3个页面,导航将带您来回,并返回到主菜单。它只有一个视图,并且在您启动应用程序时加载所有图像。所有图像首先被隐藏,并根据需要显示(隐藏=否)。

该应用程序加载速度非常缓慢,然后完全按照需要运行。点击大约15个图像后,它会崩溃。

我已经使用过仪器(还不完全确定如何),但它没有显示任何内存泄漏。它在崩溃之前多次显示“低内存”。

因此,我的问题的时间。我很抱歉,这些都是非常业余的。这是我第一次在我的应用程序中看到任何崩溃,这对我来说似乎很简单。它比我之前做的任何事都有更多的图像。

  1. 没有从头开始的应用程序,有什么我可以做,以解决问题,并消除崩溃?我不完全明白如何处理记忆(显然)。我知道任何时候你分配一些东西你应该释放它,但我不知道我曾经分配过它。我所做的只是显示和隐藏图像。

  2. 如果我必须从头开始,做这样的应用程序的最佳方式是什么(类似于一本书,导航主窗口,以及10个导致每个3个全屏图像的按钮)?我从来没有比实用程序模板更多的视图工作。

  3. 我可以提供哪些其他信息来帮助我?

我很感激!我为一个朋友创建了这个应用程序,我一直在努力尝试做出正确的选择。

编辑:

(添加您的分析细节和代码在这里)。在你的代码前放4个空格并确保格式化。

- (IBAction)pressNext:(id)sender 
{ 
if (num == 11) 
{ 
    peteNotes1.hidden = YES; 
    //[peteNotes1 release], peteNotes1 = nil; 
    peteBio.hidden = NO; 
    num = 12; 
    //[self playRandomSound]; 
} 
else if (num == 12) 
{ 
    peteBio.hidden = YES; 
    //[peteBio release], peteBio = nil; 
    petePic.hidden = NO; 
    next.hidden = YES; 
    num = 13; 
    //[self playRandomSound]; 
} 
else if (num == 21) 
{ 
    eddieNotes1.hidden = YES; 
    //[eddieNotes1 release], eddieNotes1 = nil; 
    eddieBio.hidden = NO; 
    num = 22; 
    //[self playRandomSound]; 
} 
else if (num == 22) 
{ 
    eddieBio.hidden = YES; 
    //[eddieBio release], eddieBio = nil; 
    eddiePic.hidden = NO; 
    next.hidden = YES; 
    num = 23; 
    //[self playRandomSound]; 
} 
+0

你可以添加一些代码吗?这将有助于... – bryanmac

+0

代码之外,你是否发布图像?你是否反复加载相同的图像?这听起来像你有一些超过保留(增长的记忆)和过度释放(崩溃)继续。 – bryanmac

+0

我刚看到这个评论。我想我只加载一次图像,但隐藏和显示他们超过。 – user674224

回答

1

请添加一些代码,我会添加更多的细节。

两件事情你现在可以这样做:

  1. 运行建立与分析。它会告诉你在哪里集中。
  2. 阅读并重新阅读苹果内存指南。

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html

具体而言,在第二页上的四个规则。

不要重新开始 - 坚持下去,理解发生了什么。这是学习的最佳方式。起初很难,但你很快就会得到它。

[2美分]其他建议 - 这是我个人的意见。了解如何从头开始编写应用程序,然后将界面生成器用作便利(而非拐杖)。出于这个原因,我喜欢Zdziarski早期的iPhone SDK书籍。我知道其他人可能不同意(这很好),但开始的代码确实能帮助你了解这是怎么回事更好[/ 2美分]

编辑:

看代码后,我意识到固定这超出了SO问题的范围。但是,我确实有几条建议要关注。

  1. 花更多的时间阅读书籍和教程。从上面的代码片段可以看出,只需在通过自己的应用程序出去之前完成书籍和结构化指导即可。
  2. 查看数组。如果其他数字和设置设置下一个数字是一个非常糟糕的编码模式。点击下一步应该增加一个成员变量属性,你的数据应该在数组中。如果你正在做大开关块或者其他大块,这是你做错事的迹象。
  3. 重新考虑模式。找到一种方法来按需加载图像。并且,了解如何在不需要时卸载/释放图像。通过加载前端和隐藏,您的启动速度和内存占用速度都很慢。
  4. 看看图像的大小。您是否将它们重新调整为iPhone上每英寸的最佳尺寸和像素?

希望最初的指针和这些指标能帮助你更接近正确的方向。

+0

谢谢。这是100%使用接口生成器构建的。我正在分析建设。仍然在我的小盒子外学习。同时阅读内存指南并试图理解它。 – user674224

+0

好的 - 如果你想在分析后发布一些代码会有所帮助。它可能会帮助你发布一些重点分析点来分析点。 – bryanmac

+0

谢谢。我现在可以做到这一点,但我不确定从哪里获取代码。对不起,如果我需要走过..我点击构建 - 分析。现在哪些代码最适合发布? Log Navigator屏幕上的所有内容? – user674224

相关问题