我知道我可以通过从iPhone模拟器的下拉菜单中选择"模拟内存警告"来模拟模拟器上的内存警告.我甚至可以为此做一个热门钥匙.
但这不是我想要实现的目标.我想通过简单的代码来做到这一点,让我们说每5秒做一次.那可能吗?
我有一个自助服务终端应用程序,它实际上显示了一堆幻灯片,上面有各种信息.我最初在一年前开始编写代码,当时我开始使用Objective-C和iOS开发.我发现我的代码风格现在比它更清晰,而且我更有经验,所以我决定从头开始重写.
我使用Allocations工具运行我的应用程序,以查看内存使用情况.考虑到这是一个自助服务终端应用程序,一切都需要顺利运行,没有泄漏.(当然所有应用程序都需要在没有泄漏的情况下运行,但是一个自助服务终端应用程序使这个目标变得更加重要.)我看到了一些有趣的结果,所以我也运行了旧版本的代码.
运行旧版本的代码,我看到甚至运行大约1.15兆字节的内存使用量.似乎所有东西都必要时进行分配和解除分配.然而,在我的新实现中,我看到了一些不同的东西.内存使用率一直在小幅上升,然后最终似乎达到了大约1.47兆字节的使用率.以下是运行超过10小时后新分配报告的样子:

我担心的原因有几个.
旧项目和新项目之间存在几个显着差异.
旧版本使用Plists作为后备存储(我手动读取和写入plist文件.)新项目使用Core Data.
新项目实现了一个库,该库在旧项目没有的每个"幻灯片"上调用.我会更关心这个库,除了我写它并且我经历了它以确保我发布了所有内容并且只在手动发布不可能的地方自动释放.
这两个类都使用工厂类来创建幻灯片.在旧项目中,工厂类是单身人士.我认为将它变成普通的类可以帮助解决内存问题,因为单例从未发布过.(因此它的 属性没有被释放.在新项目中,工厂类正在被释放,所以我不确定为什么它仍然占用所有内存(如果这是导致问题的原因).
旧项目在各个地方使用字符串常量.新代码使用了大量枚举来实现相同的功能.(新代码通常使用更多常量.)
如何追踪内存峰值?当应用程序丢弃它正在使用的内容时,内存全部被应用程序清理,但在应用程序终止之前它似乎没有丢弃内容.
如果有人帮我指出正确的方向,我将不胜感激.
编辑:
它看起来像调峰正在通过调用引起KosherCocoa库.如果有人会介意看看它并告诉我在内存管理方面我做错了什么,我真的很感激.
memory-management objective-c instruments memory-profiling ios