“self.propery = [[SomeClass alloc] init];”泄密记忆?

时间:2010-08-23 16:36:53

标签: objective-c memory-management

在Objective-C中编写是否安全

self.propery = [[SomeClass alloc] init];

而不是

SomeClass *tmp = [[SomeClass alloc] init];
self.property = tmp;
[tmp release];

或第一个表格会泄漏内存吗?

4 个答案:

答案 0 :(得分:5)

除非您提供自定义属性设置器,否则第一个示例会泄漏。您可以使用:

self.propery = [[[SomeClass alloc] init] autorelease];

相反。

答案 1 :(得分:2)

这取决于属性的定义方式。如果它用retain或copy定义,那么,是的,你的第一个例子会泄漏。

答案 2 :(得分:0)

第一个会泄漏。

当您不再需要[[ alloc] init]时,您必须释放或自动发布任何内容。

请参阅此guide

答案 3 :(得分:0)

无论您的属性是否定义为保留,复制或分配,都没有区别。当您使用[[SomeClass alloc] init]创建类的本地实例时,您有责任在其创建的范围内发布它。

凯文的回答是正确的。如果您不想创建,设置,释放 - 您可以使用自动释放。主自动释放池不时耗尽,在应用程序的生命周期内不会使用该内存。

值得注意的是,自动释放池的不可预测性意味着您无法确定何时释放该内存。如果在像iPhone这样的内存受限平台上工作,除非在必要的地方,否则应该避免使用自动释放。