澄清Autorelease用法

时间:2011-10-20 15:42:12

标签: ios objective-c memory-management autorelease

在我使用自动释放的大多数代码中,对象最终都是从函数返回的。在此之后无法调用快速释放,自动释放是要走的路。但是,在对象要传递给另一个保留它的对象的情况下,使用自动释放同样有效吗?

例如

-(void)foo
{
   SomeClass *someObject = [[[SomeClass alloc] init] autorelease];
   //Do some things
   self.someOtherClass.someProperty = someObject;
}

将对象分配给someProperty后释放对象是否有任何实际区别:

-(void)foo
{
   SomeClass *someObject = [[SomeClass alloc] init]];
   //Do some things
   self.someOtherClass.someProperty = someObject;
   [someObject release];
}

是否存在后者比前者更优先的情况?

2 个答案:

答案 0 :(得分:1)

两者都可以接受,但您不得使用发布版本来避免memory spikes an other problems

在此发布是可以接受的,因为您可以假设对象的接收者将保留它,如果以后需要它。所以你可以在给出后立即安全释放。

答案 1 :(得分:0)

我认为后者在内存使用率和CPU使用率方面总是表现稍好一些,但每次分配只需少量。

如果您不想编写三行代码并且没有性能问题,请随意使用前者。请注意,前者实际上可以在一个语句中编写,而根本没有局部变量。