我有几个关于内存管理的问题。我正在使用ARC,Xcode4.2.1,部署到ios 5.0+
1)如何知道您的应用程序何时有效且正确地管理内存?如果不是内存泄漏,正如你在instruments leaks工具中测量的那样,那么你的应用程序是完全健康的吗?
2)我是否应该使用其他工具而不是泄漏来确定我的应用程序是否管理好内存?
3)随着我继续运行我的应用程序,我的活动字节数也在不断增长。我的应用程序有一个显示一些数据的UITableView。当用户单击一行时,我会将他们带到一个更详细的页面。如果这就是我的应用程序正在做的所有事情,为什么我的活动字节数继续增长?难道不应该释放所有的对象,将我的活动字节减少到我第一次启动应用程序时的状态吗?
4) malloc到底是什么?
我即将完成该应用程序,我只想知道如何衡量该应用程序是否可发布,以及如何识别任何问题。
谢谢!
发布于 2012-07-19 09:48:15
您如何知道您的应用程序何时有效且正确地管理内存?
我是否应该使用泄漏以外的其他工具来确定我的应用程序是否管理得很好?
Instruments中的各种工具应该足以帮助您查看应用程序是如何使用内存的。您可能要考虑做的一件事是保存Instruments会话的结果以及一些注释,以便您可以看到应用程序的内存使用随时间的变化。
随着我继续运行我的应用程序,
我的活动字节数保持增长。
这可能是问题,也可能不是问题;了解不断添加的块中的内容会有所帮助。如果设备上有可用的内存,使用它没有什么问题,特别是如果这意味着你的应用程序性能更好,可以避免从某些来源下载类似的数据,等等。但如果你的应用程序一直分配新的视图控制器和视图,而不释放旧的,这可能是一个漏洞。
到底什么是malloc?
malloc()是C标准库中的内存分配函数之一。我有一种感觉,您之所以这样问,是因为您在分配工具的Category列中看到了类似于Malloc 16字节的代码行:

这些行表示由malloc()分配的内存块的类别。如您所见,在我的例子中,我的程序中当前使用的是来自malloc()的3318个16字节块。确切的数字并不那么重要--您关心的是这个数字如何随着时间的推移而变化。如果您发现每次执行某个操作时都会使用一定数量的malloc()块,并且从未释放这些块,那么您就有了在程序中查找内存问题的线索。(当然,任何其他类型的块也是如此。)
发布于 2012-07-19 08:34:23
How is malloc() implemented internally?
How do malloc() and free() work?
How do free and malloc work in C?
和网页,如下所示:
http://en.wikipedia.org/wiki/C_dynamic_memory_allocation
http://web.eecs.utk.edu/~huangj/cs360/360/notes/Malloc1/lecture.html
发布于 2012-07-19 08:34:31
1)这取决于你的应用程序做什么。如果您正在运行一个执行简单任务的简单应用程序,那么高效的内存使用并不是什么大问题。您将更专注于编写一个简单且占用内存的应用程序。但是,如果您的项目需要肌肉,或者执行密集的计算,那么内存优化完全专注于修剪边缘周围的脂肪。
2)当然。僵尸、分配,甚至Time Profiler都可以帮助您管理对象的生命周期。
3)根据您的描述,您的应用程序实际上应该使用越来越多的内存。您似乎期望导航堆栈在堆栈的更高位置释放视图控制器,这与导航堆栈存在的原因完全相反。当您将更多的视图控制器放到堆栈上时,内存使用量会增加,因为现在有了一个新的视图控制器需要管理。如果你的应用程序删除了很大一部分内存,这将是你要担心的事情,因为那样你就会在僵尸对象上遇到严重的问题。
4) malloc是alloc的C版本。唯一不同的是,alloc执行了一些运行时魔术,设置了类的isa指针,并在最终调用malloc之前调整了一些次要的每个对象的值。Malloc分配一个内存块,并返回一个指向该对象的指针。这就是为什么你只分配对象,而不分配原语(注意,原语可以指向,然后需要malloc),因为你需要一个有效的指针,它本身就是一个内存块。
https://stackoverflow.com/questions/11552255
复制相似问题