自动释放对象的LifeTime

时间:2011-05-30 05:41:10

标签: iphone ipad memory-management autorelease nsautoreleasepool

-(void)returnString
{
       NSString *str=[[NSString alloc]init];
       return [str autorelease];
}
-(void)getString
{
      NSString *p=[self returnString];
}

这里string str的生命周期是多少。什么时候str的retainCount将变为零。我知道它的保留计数在runloop结束时将变为零。 runloop的结尾是否意味着调用returnString的函数的结束。如果不是runloop意味着什么,并且runloop的结束意味着什么。

-(void)returnString
{
      NSString *str=[[NSString alloc]init];
      return str;
}
-(void)getString
{
    NSString *p=[self returnString];
    [p release];
}

这种释放是否正确?

2 个答案:

答案 0 :(得分:2)

在iOS中运行循环等待某些事件发生并对其进行操作。运行循环是一个事件处理循环,用于计划工作并协调传入事件的接收。运行循环的目的是在有工作时保持线程忙,并在没有线程时让线程进入休眠状态。

您需要在方法中创建自动释放池,否则它只会在事件循环的开头创建并在事件循环结束时排空。

检查一下。 End of run loop -- autorelease pool recovery

答案 1 :(得分:1)

当你autorelease一个对象时,它被添加到自动释放池并排队等待释放。释放自动释放池后,池中的所有对象都会发送release消息,并从内存中释放。要回答你的问题,只要池没有,对象就会保留在内存中,假设它在某个时刻没有保留。

有关此内容的更多信息,请参见Autorelease PoolsMemory Management Programming Guide部分。