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

3

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

问题:我正在学习在Objective-C中分配和释放内存,我发现这是一项相当棘手的任务,需要在实际运行代码的基础上加以考虑。我试图了解已有的应用程序,以及一个管理内存不良的程序会出现什么情况。

A) 应用程序通常发布时是否没有内存泄漏?这是一个可行的目标吗?还是更现实的做法是删除最严重的违规行为就可以了?

B) 如果我创建了一个NSString来作为视图的标题,但忘记释放它,那么只有当我反复创建这个字符串时才会成为问题吗?我想我所做的是创造一个存储该字符串所需内存的开销,因此可能非常微小(几个字节?)。然而,如果我在游戏的快速循环中“泄露”每个循环的整数之类的东西,那么这将很快使应用程序溢出。这些假设正确吗?

如果这不符合社区共享的要求,我很抱歉,我只是试图了解如何考虑内存以及我需要多么小心。任何有关应用程序商店提交的应用程序经验都非常值得听。


也许您可以在“答案”部分详细说明? - Alex Mcp
这不需要成为一个社区维基。 - Dave DeLong
每当我发布一些可能不被接受为问题的内容时,我会将其标记为 CW 以延迟其关闭 :-/ - Alex Mcp
@Alex Mcp:也许你可以将这个取消“社区维基”状态。它并不是主观的。 - Mitch Wheat
哦,我好像找不到“取消维基”的选项… - Alex Mcp
确认,只有管理员可以执行此操作:http://meta.stackexchange.com/questions/256/allow-owner-to-un-community-wiki-a-question-or-answer - Alex Mcp
5个回答

5

我曾经教授Cocoa开发课程,记忆管理是我教授的第二个重点(第一个是C指针)。我的经验告诉我,如果一个Cocoa程序员不理解内存管理,那么他永远不能成为一名优秀的Cocoa程序员。

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


4
跟随这些模式,内存管理很少是Cocoa中最大的障碍。然而,我在这里要持反对意见:你的感觉大多是正确的。泄漏一个用作标签的NSString不会伤害任何人。任何复杂度的应用程序都有多个单例存在于世界上,为整个应用程序的生命周期保持状态,这也是可以的(好的,因为它是显式的)。因此,一次意外泄漏字符串并不会致命。但是泄漏大型数据(图像、纹理、文件内容数据)会伤害你——Apple不保证iPhone OS平台上您的进程有任何最小或确定性的内存量,因此其中一两个泄漏可能导致用户在现场频繁看到“崩溃”,而您在开发过程中并不总是能看到。
保持警惕,使用模式和工具,您就会没问题。

3

您绝不应该泄露内存。

考虑一下:今天您编写的某些代码在程序执行期间仅泄漏内存一次。明天,您以某种其他方式重用该代码,并且它被执行多次。那么漏洞就成为了一个问题。找到这个漏洞可能非常困难。比起第一次编写代码时始终释放内存要困难得多。

节省自己和他人的麻烦:始终释放内存。


1

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接