在Objective-C中管理内存有多重要?

时间:2010-06-06 03:52:18

标签: objective-c memory memory-management

背景:我(赶紧赶时髦)开始学习iPhone / iPad开发和Objective-C。我有很好的Web开发背景,我的大部分编程都是用javascript(没有库),Ruby和PHP完成的。

问题:我正在学习如何在Objective-C中分配和释放内存,我认为在实际获取farking之前进行分层是一项相当棘手的任务跑。我正在尝试了解那里的应用程序,以及内存管理不佳的程序会发生什么。

A)应用程序通常是在没有内存泄漏的情况下发布的吗?这是一个可行的目标,还是人们更现实地只是将最坏的罪犯切除,这没关系?

B)如果我为视图的标题创建NSString,让我们说,并且忘记将其解除分配它,如果我重新创建该字符串,这真的只会成为一个问题反复?我想我正在做的是创建存储该字符串所需的内存开销,所以它可能非常蹩脚(几个字节?)但是如果我在游戏中有一个快速循环周期,那么每个周期都会“泄漏”一个int什么的,这会很快溢出应用程序。这些假设是否正确?

对不起,如果这不是社区维基小巷,我只是试图了解如何考虑内存以及我需要多么小心。任何轶事或App Store提交的应用程序体验都会很棒。

5 个答案:

答案 0 :(得分:5)

我教过Cocoa开发课程,内存管理是我教的第二件事(第一件是C指针)。我的经验是,如果一个Cocoa程序员不理解内存管理,那么他永远不会成为Cocoa程序员的大部分。

换句话说,学习内存管理。你不会后悔的。

答案 1 :(得分:4)

遵循模式,内存管理很少是Cocoa的最大障碍。

然而,我会在这里成为一个逆向者:你的感觉大多是正确的。泄漏一个用作标签的NSString不会伤害任何人。大多数具有任何复杂性的应用程序在应用程序的整个生命周期中都拥有多个单例,这也很好(嗯,更好,因为它是明确的)。所以不,不小心泄漏一根绳子不会杀了你。但是,泄漏大件物品(图像,纹理,文件内容数据)会对您造成伤害 - Apple不保证您的iPhone OS平台上的进程有任何最小或确定的内存量,因此这些泄漏中的一个或两个可能会导致用户在开发过程中看到频繁发生“崩溃”的情况。

保持警惕,使用模式,并使用工具,你会没事的。

答案 2 :(得分:3)

你应该从不泄漏内存。

考虑一下:您今天编写了一些代码,在程序执行期间只泄漏一次内存。明天,您以其他方式重用该代码并执行多次。泄漏是有问题的。发现泄漏可能非常困难。比第一次编写代码时确保永远释放内存困难得多。

让自己和他人在头脑中保持头痛:永远释放你的记忆。

答案 3 :(得分:1)

这非常重要。 Apple提供了一种名为Instruments的内存泄漏检测工具。

此主题之前也讨论了bean:Memory leak detection tools in XCode

答案 4 :(得分:0)

比生命本身更重要:p

说真的,只要按照下面链接中的规则,你就可以了。

一段时间后它变成了第二天性。

http://theuntitledblog.com/2010/05/25/objective-c-memory-management-rules/ http://developer.apple.com/iphone/library/documentation/cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html