iPhone应用内存问题。由于内存不足而崩溃?

时间:2011-11-03 02:22:54

标签: iphone xcode

我的iPhone应用程序像疯了一样崩溃。我需要一些帮助,或者真正指导。

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

该应用程序基本上是一个带有10个按钮的菜单屏幕。每个按钮指向3页,导航将前后移动,然后返回主菜单。它只有一个视图,所有图像都会在您启动应用程序时加载。首先隐藏所有图像,并根据需要显示它们(隐藏= NO)。

应用程序非常缓慢地加载,然后根据需要完全运行。点击大约15张图片后,它会崩溃。

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

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

  1. 如果不从头开始启动应用程序,我可以做些什么来解决问题并消除崩溃?我不完全了解如何处理内存(显然)。我知道,无论何时你分配一些东西你应该释放它,但我不知道我曾经分配它。我所做的只是展示和隐藏图像。

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

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

  4. 我很感激!我为一位朋友创建了这个应用程序,并且我一直在努力做好几天的努力。

    修改

    (在此处添加您的分析详细信息和代码)。在代码前放置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];
    }
    

1 个答案:

答案 0 :(得分:1)

请添加一些代码,我会添加更多详细信息。

你现在可以做的两件事:

  1. 使用analyze运行构建。它会告诉你在哪里聚焦。
  2. 阅读并重新阅读Apple记忆指南。
  3. http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html

    具体来说,就是第二页上的四条规则。

    不要重新开始 - 坚持下去并了解正在发生的事情。这是最好的学习方式。一开始很难,但你很快就会明白。

    [2分]其他建议 - 这是我个人的意见。了解如何从头开始编写应用程序代码,然后使用界面构建器作为方便(而不是拐杖)。出于这个原因,我喜欢Zdziarski早期的iPhone SDK书籍。我意识到其他人可能不同意(这很好),但从代码开始真的可以帮助你理解正在发生的事情。[/ 2分]

    修改

    在查看代码之后,我意识到修复这个问题超出了SO问题的范围。但是,我确实有一些建议可以集中在哪里。

    1. 花一些时间浏览书籍和教程。从上面的代码片段中可以明显看出,在出自己的应用程序之前,您只需要完成书籍和结构化指导。
    2. 查看数组。带有nums和设置设置下一个num的if else是一个非常糟糕的编码模式。单击下一步应增加成员变量属性,您的数据应该在数组中。如果你正在做大型的开关块或大块的if else块,那就表明你做错了。
    3. 重新思考模式。找到一种按需加载图像的方法。并且,弄清楚如何在不需要时卸载/释放图像。通过加载前面并隐藏起来,你的启动和内存占用速度很慢。
    4. 查看图片的大小。您是否已将它们调整为iphone上的最佳尺寸和每英寸像素数?
    5. 希望最初的指针和这些可以帮助你更接近正确的方向。