分配已分配对象以保留属性的最佳做法是什么?

时间:2012-09-12 10:08:21

标签: ios memory-management properties coding-style

亲爱的iOS开发者,

我仍在开发没有ARC(即将推出),在与iOS初学者进行了有趣的讨论之后,我提出了初始化一个retain属性的方法(让我们称之为property),我继承了来自ARC前时代的Apple文档:

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

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

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

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

内存管理不太清晰,但更紧凑(并且可以更容易地实现ARC迁移)。

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

3 个答案:

答案 0 :(得分:0)

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

顺便说一下:切换到ARC。

答案 1 :(得分:0)

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

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

当您需要进一步初始化时(例如,在设置self.property之前)或者在某些情况下希望最小化对象被添加到自动释放池的可能性或者它的破坏更可预测,那么您可能更喜欢第二个。< / p>

然而,如果你要转移到ARC,我不会为此感到烦恼 - 当时会有很多改变,你可能会在移植后无法获得额外的工作。

答案 2 :(得分:0)

使用autorelease永远不是一个很好的选择,因为你无法控制你正在初始化的对象的生命周期,所以可能是这样的情况

在ViewController中,您已经初始化了一些对象,例如属性,你正在浏览其他一些视图,如果你想回到旧的ViewController并访问该对象,它可能会被iOS发布,你的应用可能会崩溃。

我认为最早切换到ARC 将是您的最佳选择。我认为ARC应该被每个开发人员使用,几乎所有设备都是由iOS5更新提供的,因此支持旧设备的机会可能最少。

希望这能解决你的疑问