它是安全的在Objective-C编写的“self.propery = [[SomeClass alloc] init];”泄漏内存?
self.propery = [[SomeClass alloc] init];
代替
SomeClass *tmp = [[SomeClass alloc] init];
self.property = tmp;
[tmp release];
或将第一种形式的内存泄漏?
它是安全的在Objective-C编写的“self.propery = [[SomeClass alloc] init];”泄漏内存?
self.propery = [[SomeClass alloc] init];
代替
SomeClass *tmp = [[SomeClass alloc] init];
self.property = tmp;
[tmp release];
或将第一种形式的内存泄漏?
第一个示例泄漏,除非您提供自定义属性设置器。您可以使用:
self.propery = [[[SomeClass alloc] init] autorelease];
取而代之。
谢谢。在NSAutoreleasePool发布之前不会保留内存(即默认情况下,直到我退出应用程序)? – giorgiga 2010-08-23 17:08:24
我的理解是,autorelease池通常会在每次执行“运行循环”后(应用程序退出之前)释放。假设你正在编写一个Cocoa或Cocoa Touch应用程序。 – 2010-08-23 19:05:32
无论您的财产是否定义为保留,复制或分配,它都没有什么差别。当您使用[[SomeClass alloc] init]
创建一个类的本地实例时,您有责任在它创建的范围内发布它。
凯文的回答是正确的。如果你不想创建,设置,释放 - 你可以使用autorelease。主要的自动释放池不时耗尽,你不会在应用程序的整个生命周期中使用该内存。
值得注意的是,autorelease池的不可预测性意味着您无法确定何时会释放内存。如果在像iPhone这样的内存受限的平台上工作,您应该避免在必要的地方使用autorelease。
向我们显示“属性”的属性声明。这是'@ property'行。 – jer 2010-08-23 16:39:26