【问题标题】:How important is managing memory in Objective-C?在 Objective-C 中管理内存有多重要?
【发布时间】:2010-06-06 03:52:17
【问题描述】:

背景:我正在(赶上潮流并)开始学习 iPhone/iPad 开发和 Objective-C。我在 Web 开发方面有很好的背景,我的大部分编程都是用 javascript(没有库)、Ruby 和 PHP 完成的。

问题:我正在学习如何在 Objective-C 中分配和释放内存,我认为在实际运行 farking 的基础上进行分层是一项相当棘手的任务。我试图了解现有的应用程序以及内存管理不佳的程序会发生什么。

A) 应用发布时通常没有内存泄漏吗?这是一个可行的目标,还是人们更现实地只是切除最严重的罪犯就可以了?

B) 如果我为视图的标题创建NSString,假设并忘记释放它,这真的只有在我反复重新创建该字符串时才会成为问题吗?我想我正在做的是创建存储该字符串所需的内存开销,所以它可能很麻烦(几个字节?)但是,如果我在游戏中有一个快速循环循环,每个循环都会“泄漏”一个 int或其他东西,这会很快溢出应用程序。这些假设是否正确?

抱歉,如果这不符合社区维基的要求,我只是想了解如何思考记忆以及我需要多小心。听到任何轶事或 App Store 提交的应用体验也会很棒。

【问题讨论】:

  • 也许您会在“答案”部分详细说明?
  • 这不需要是一个社区维基
  • 每当我发布一些我认为可能不被接受的问题时,我都会将其推迟关闭:-/
  • @Alex Mcp:也许你会让这不是“社区维基”。这不是主观的。
  • 呃,我似乎无法找到“un-wiki”选项...

标签: objective-c memory memory-management


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    但是,我在这里要逆势而上:您的感觉大多是正确的。在某处泄漏一个用作标签的 NSString 不会伤害任何人。大多数任何复杂度的应用程序在世界各地都有多个单例在应用程序的整个生命周期中保持状态,这也可以(好吧,更好,因为它是明确的)。所以不,不小心泄露了一次字符串不会杀死你。但是,泄露大的东西(图像、纹理、文件内容数据)会伤害你——Apple 不保证你在 iPhone OS 平台上的进程有任何最小或确定的内存量,所以其中一两个泄露可能会导致用户在该领域中经常看到您在开发过程中并不经常看到的“崩溃”。

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

    【讨论】:

      【解决方案3】:

      您应该永远不要泄漏内存。

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

      免去你自己和他人的后顾之忧:永远释放你的记忆。

      【讨论】:

        【解决方案4】:

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

        这个话题之前也在这里讨论过:Memory leak detection tools in XCode

        【讨论】:

          【解决方案5】:

          比生命本身更重要: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

          【讨论】:

            猜你喜欢
            • 2012-08-08
            • 2020-01-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-06-28
            • 1970-01-01
            相关资源
            最近更新 更多