【问题标题】:iPhone NSMutableArray vs. SQLiteiPhone NSMutableArray 与 SQLite
【发布时间】:2011-04-13 21:21:34
【问题描述】:

我有一个为 iPhone 开发的目录,这是我的第一个应用程序。因此,当我在目录中有超过 55 张照片时,我遇到了一些内存泄漏问题和应用程序崩溃。 (我会在它崩溃时解释)

我已经使用 Leaks Performance Tools 进行了测试,并成功修复了漏洞,但我的应用仍然崩溃。

我的数据类有 5 个 NSMutableArrays。 1 有 50 个用于 Portrait 的 UIImage 元素。第二个有 25 个用于景观的 UIImage 元素(目录在 1 个横向图像中使用 2 个纵向)。其他有 50 个 NSNumber 用于从纵向阵列到横向阵列的参考图像位置。另外两个有 50 个 NSString 元素,具有 (1) 名称和 (2) 图标图像的地址。在 AppDelegate 中创建了一个 Data 类对象(应用程序的加载)。

我在 Portrait 中启动目录,通过传递 Portrait 数组(使用 UIImages)制作视图。当设备向左转时,我重新制作通过景观数组的视图(释放旧视图)。在 xCode 中,一切正常!!!在设备中,当我向左转动设备(重新制作视图)时,有时(我注意到当我打开其他应用程序时)应用程序崩溃并显示以下消息: “节目接收信号:“0”。 数据格式化程序暂时不可用”

我知道这条消息是指内存泄漏问题,所以我的问题是:

使用 SQLite 存储我的数据(实际上是在 NSMutableArrays 中)我会获得内存性能吗?我是 iPhone 版 SQLite 的新手。还有其他解决方案来存储我的数据吗?

谢谢大家!!!

【问题讨论】:

    标签: iphone database sqlite nsmutablearray catalog


    【解决方案1】:

    这个问题不是关于NSMutableArrays 与SQLite 而是更多关于内存使用的问题。 UIImage 通常会消耗大量内存,并且应该在不需要时释放,通常是在它不可见的时候。您的应用程序可能有 0 次泄漏,但仍会崩溃。您需要注册UIApplicationDidReceiveMemoryWarningNotification 通知并采取相应措施。 UIViewControllers 已经回复 - (void)didReceiveMemoryWarning,您可以覆盖它。现在,为了将这些图像存储在磁盘上,当您需要释放内存时,您可以使用 SQLite 或我推荐的方法,只需创建一个缓存文件夹即可。

    【讨论】:

    • 谢谢!这个答案让我获得了时间,并且不会犯错误改变我的存储方法。唯一的问题是我是 Objective-C 的相对新手,我不知道如何很好地管理内存。我阅读了 Apple 教程,但从未改变。我在委托启动方法中创建了带有 UIImage 的数组(使用 [UIImage alloc])。当我显示这些 UIImages 之后,我使用 [myUIImage release];并且应用程序因参考损坏而崩溃。是否还有其他非 Apple 提供的关于如何在 iPhone 中使用内存管理的教程?
    【解决方案2】:

    我喜欢 SQLite 作为解决方案。提供预填充的数据库很容易,除此之外,您只需将应用程序连接到一些可以添加/删除/更新记录的方法。

    SQLite 无法解决您的问题 - 问题在于内存管理。弄错了,你将数据存储在哪里都没有关系。

    分离 2 个关注点 - 显示与存储。让显示正常工作,然后担心在哪里存储数据。

    【讨论】:

    • 谢谢!我的答案在上面!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 2012-07-29
    • 2011-01-21
    相关资源
    最近更新 更多