【问题标题】:Clarification of Autorelease Usage澄清自动释放的使用
【发布时间】:2011-12-11 22:03:58
【问题描述】:

在我使用自动释放的大部分代码中,对象最终都是从函数返回的。显然,在这之后不能调用释放,而自动释放是要走的路。但是,在将对象传递给将保留它的另一个对象的情况下,使用自动释放是否同样有效?

例如

-(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];
}

有没有什么情况下后者比前者更可取?

【问题讨论】:

    标签: ios objective-c memory-management autorelease


    【解决方案1】:

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

    在这里释放是可以接受的,因为您可以假设对象的接收者会保留它,如果以后需要的话。这样一来,您就可以安全地释放它。

    【讨论】:

    • 只有在您进行大量繁重工作时才会出现问题。对于像NSStringNSNumber 这样的较小对象,您通常可以使用-autorelease。这是一个判断电话。
    • @JonathanGrynspan 同意,这是一个指导,而不是规则。
    【解决方案2】:

    我认为后者在内存使用率和 CPU 使用率方面总是会表现得稍好一些,但每次分配的性能只会很小。

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

    【讨论】:

      猜你喜欢
      • 2013-01-08
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 2011-05-03
      • 1970-01-01
      相关资源
      最近更新 更多