在Objective-C中编写是否安全
self.propery = [[SomeClass alloc] init];
而不是
SomeClass *tmp = [[SomeClass alloc] init];
self.property = tmp;
[tmp release];
或第一个表格会泄漏内存吗?
答案 0 :(得分:5)
除非您提供自定义属性设置器,否则第一个示例会泄漏。您可以使用:
self.propery = [[[SomeClass alloc] init] autorelease];
相反。
答案 1 :(得分:2)
这取决于属性的定义方式。如果它用retain或copy定义,那么,是的,你的第一个例子会泄漏。
答案 2 :(得分:0)
答案 3 :(得分:0)
无论您的属性是否定义为保留,复制或分配,都没有区别。当您使用[[SomeClass alloc] init]
创建类的本地实例时,您有责任在其创建的范围内发布它。
凯文的回答是正确的。如果您不想创建,设置,释放 - 您可以使用自动释放。主自动释放池不时耗尽,在应用程序的生命周期内不会使用该内存。
值得注意的是,自动释放池的不可预测性意味着您无法确定何时释放该内存。如果在像iPhone这样的内存受限平台上工作,除非在必要的地方,否则应该避免使用自动释放。