【问题标题】:Best scenario to avoid memory leaks on iOS在 iOS 上避免内存泄漏的最佳方案
【发布时间】:2011-08-02 13:48:20
【问题描述】:

我正在构建一个读取 rss 文件的应用程序,例如 Bing 或 Pulse,因此我构建了一个类 (UIViewController),它显示提要中的每个单独条目,以及一个包含该条目列表的类和另一个类一次显示所有提要,并且我没有使用任何 xib 文件,因此我在每个类中实现了一个方法,该方法在每次旋转后被调用以重置该类中视图的框架。但是我在内存中遇到了一个问题,特别是当旋转发生时调用该方法时知道它只是为视图中的每个帧分配了一个 CGRect。 所以你能帮我避免这个问题或建议一种不同的方法来避免它吗,我是否正确不使用 xib 文件或者我应该尽可能使用它们并在其中设置旋转的东西(使用自动调整大小的蒙版)。

如果有像这些应用程序这样复杂的免费示例,任何人都可以指出它。

任何帮助将不胜感激, 并提前感谢...

【问题讨论】:

    标签: iphone ipad memory-management memory-leaks pulse


    【解决方案1】:

    首先,当 nib 文件对您有用时,没有理由避免使用它们。它们通常很有用。当 nib 文件对您无用时,没有理由使用它们。如果您有复杂的布局,它们肯定非常有用。然而,是否使用它们是基于特定应用程序的个人选择。作为初学者,我建议使用它们并熟悉它们,尤其是依靠 Xcode 模板来正确设置它们。

    Nib 文件不是您的问题,无论哪种方式。您正在泄漏内存,您需要调查原因。首先,运行静态分析器以确保没有明显的错误。然后在 Instruments (Leaks) 下运行你的应用程序并寻找大的泄漏。然后在 Instruments (Allocations) 下运行您的应用程序并查找占用最多内存的内容。这应该指出你的错误。

    在没有深入了解您的代码的情况下,最可能的原因是您滥用了 ivars。确保您通过访问器访问您的 ivars(initdealloc 和访问器中的除外)。直接访问您的 ivars 是 iOS 内存问题的第一大原因。

    【讨论】:

    • 我通过 init 和 alloc 中的 self 关键字访问任何其他 viewController 中的任何视图或视图控制器,并且我确保每个 alloc 都有相应的释放或自动释放,但我的问题是,如果我现在有一个包含大约 25 个 webview 的 scrollView,我会在列表中保留对所有这些 webview 的引用,并且在旋转设备时,我会通过它的引用调整每个 webview 的大小,这就是我我基本上是在问这是否会导致任何问题?并感谢您解释清楚的答案。
    • 嗨,Rob,感谢您对我的帖子发表评论。我认为你已经解释得很好,这让我删除了我的帖子。考虑到它是编程新手,这有点令人困惑。我也只有大约 6 个月的 obj-c dev exp。不用说,我赞成它的纯粹细节。
    • 25 次网页浏览量很多,但这不是泄漏。为什么你认为你在泄漏?
    • 您好,再次感谢您的大力帮助。我已经确保使用静态分析器和 Instruments 工具没有泄漏,我的应用程序在最坏的情况下需要大约 8 MB,但是当我点击加载 web 视图的按钮时,它会因“数据格式化程序暂时不可用”而崩溃。 ..” 发生这种情况时,分配的内存约为 3 MB,所以我猜这可能是另一个错误,或者 webviews 的初始化需要一些 Instruments 工具无法检测到的资源。
    • 您能否告诉我此崩溃是否是由于 webviews 造成的,如果是,为什么 Instruments 工具无法检测到。再次感谢。
    【解决方案2】:

    正确释放已全局分配和定义的对象。当 UIViewController 处于活动状态时,不要释放它的对象。大多数泄漏问题是通过在 UIViewController 的对象超出范围之前释放它而发生的。

    【讨论】:

      猜你喜欢
      • 2022-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      • 2015-05-04
      • 2018-04-08
      相关资源
      最近更新 更多