【问题标题】:What is the best-practice to assign allocated objects to retain properties?分配分配的对象以保留属性的最佳实践是什么?
【发布时间】:2012-09-12 10:08:20
【问题描述】:

尊敬的 iOS 开发者,

我仍在不使用 ARC 进行开发(即将切换),在与 iOS 初学者进行有趣的讨论后,我展示了我从 Apple 继承的初始化保留属性(我们称之为 property)的方法ARC 之前的文档:

NSObject *tmpProperty = [[NSObject alloc] init];
self.property = tmpProperty;
[tmpProperty release];

我看到了一个很大的好处:它使内存管理变得清晰。

还有一个很大的缺点:它需要 3 行,对于一些非常基本的东西。所以我们假设:为什么不采用以下解决方案?

self.property = [[[NSObject alloc] init] autorelease];

它对内存管理不太清楚,但更紧凑(它可能使 ARC 迁移更容易实现)。

你自己使用的是什么(曾经?)?您认为其中一个明显优于另一个解决方案吗?

【问题讨论】:

    标签: ios memory-management properties coding-style


    【解决方案1】:

    使用自动释放从来都不是一个好的选择,因为您无法控制正在初始化的对象的生命周期,所以可能是这样的

    在 ViewController 中,您已经初始化了一些对象,例如属性,并且您正在切换到其他一些视图,如果您想回到旧的 ViewController 并访问该对象,它可能会被 iOS 释放,并且您的应用程序可能会崩溃。

    我认为尽早切换到 ARC 将是您的最佳选择。我认为 ARC 应该被每个开发者使用,几乎所有的设备都是由 iOS5 更新提供的,所以支持旧设备的可能性最小。

    希望能解决你的疑惑

    【讨论】:

    • objc 中的内存管理是确定性的,如果你做得正确的话。使用自动释放不会改变这一点
    • 您可以查看Apple Docs 使用自动释放的内存使用情况。
    • 我看不到任何提到应该避免自动释放的地方
    【解决方案2】:

    我尽可能使用第一个,因为它使用的内存更少。在第二种情况下,您分配的对象在运行循环完成时被释放。当您在 for 循环或表格视图单元格中有此代码时,这可能很重要。在某些情况下,这可以区分“内存警告”和“一切正常”。

    顺便说一句:切换到 ARC。

    【讨论】:

      【解决方案3】:

      两者都有。我不认为公约应该说“一个或另一个”。

      当您只需要一条线时,单线效果很好。所有权不需要额外阅读。

      当您需要进一步初始化(例如,在您设置 self.property 之前)或在某些情况下希望最大限度地减少将对象添加到自动释放池的可能性或其销毁更可预测时,您可能会倾向于第二种。

      但是,如果您即将迁移到 ARC,我不会为此担心太多 - 届时会有很多变化,迁移后您可能会付出额外的工作而没有任何收获。

      【讨论】:

        猜你喜欢
        • 2010-12-15
        • 1970-01-01
        • 1970-01-01
        • 2021-06-11
        • 1970-01-01
        • 1970-01-01
        • 2012-02-11
        • 2010-10-30
        • 2011-12-27
        相关资源
        最近更新 更多