2012-09-12 69 views
0

亲爱的同学iOS开发,分配分配对象以保留属性的最佳做法是什么?

我没有ARC(开关即将推出),并用iOS的初学者一个有趣的讨论后,仍处于发展阶段,我介绍我的方式来初始化保留属性(我们称之为property) ,我从苹果文档继承他们的弧前时代:

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

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

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

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

这是内存管理不太清楚,但更紧凑(并propably使ARC-迁移更容易实现)。

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

回答

0

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

在一个视图控制器已初始化例如一些物体的情况下属性,并且您正在切换到其他视图,并且如果您想要回到较旧的ViewController并访问该对象,则可能会由iOS释放该对象,并且您的应用程序可能会崩溃。

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

希望能够解决您的疑问

+0

如果您正确地做到了objc中的内存管理是确定性的。使用autorelease不会改变这个 –

+0

你可以看看[Apple Docs](https://developer.apple。com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html#// apple_ref/doc/uid/20000043-1000922)用于使用autorelease的内存。 –

+0

我看不到任何地方提到autorelease应该避免 –

0

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

顺便说一下:切换到ARC。

0

有点。我认为这是一个公约应该说“一个或另一个”的东西。

当您只需要一条线时,单线式工作正常。所有权不需要额外阅读。

当您需要进一步初始化时(例如在您设置self.property之前),或者在某些情况下希望将对象添加到自动释放池的可能性降至最低或其可销毁的可能性更高时,您可能会赞成第二个。

但是,如果您即将转入ARC,我不会担心这一点 - 很多情况会随之发生变化,您可能会在迁移后因为额外的工作而无法获得收益。

相关问题