0

亲爱的 iOS 开发者,

我仍然在没有 ARC 的情况下进行开发(即将切换),在与 iOS 初学者进行有趣的讨论后,我提出了初始化保留属性(我们称之为property)的方法,我从 Apple 文档在他们的 pre-ARC 继承时代:

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

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

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

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

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

什么是(是?)你使用自己?您认为其中一个明显比另一个更好吗?

4

3 回答 3

0

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

顺便说一句:切换到 ARC。

于 2012-09-12T10:16:12.263 回答
0

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

当您只需要一条线时,单线就可以很好地工作。所有权不需要额外阅读。

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

但是,如果您要迁移到 ARC,我不会为此担心太多 - 届时会有很多变化,迁移后您可能会在无收益的情况下完成额外的工作。

于 2012-09-12T10:16:38.457 回答
0

使用 autorelease 从来都不是一个好的选择,因为您无法控制正在初始化的对象的生命周期,因此可能是这样的情况

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

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

希望这能解决你的疑问

于 2012-09-12T10:18:32.170 回答