【问题标题】:LifeTime of an autoreleased object自动释放对象的生命周期
【发布时间】:2011-09-04 14:01:32
【问题描述】:
-(void)returnString
{
       NSString *str=[[NSString alloc]init];
       return [str autorelease];
}
-(void)getString
{
      NSString *p=[self returnString];
}

这里字符串 str 的生命周期是多少。 str的retainCount什么时候会变为零。我知道它的保留计数将在运行循环结束时变为零。 runloop的结束是否意味着调用returnString的函数的结束。如果不是,runloop 是什么意思,runloop 的结尾又是什么意思。

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

这种释放方式对不对?

【问题讨论】:

标签: iphone ipad memory-management autorelease nsautoreleasepool


【解决方案1】:

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

如果没有,你需要在你的方法中创建自动释放池,它只会在事件循环开始时创建并在事件循环结束时耗尽。

检查这个。 End of run loop -- autorelease pool recovery

【讨论】:

    【解决方案2】:

    当您autorelease 一个对象时,它会被添加到自动释放池并排队等待释放。当自动释放池被释放时,池中的所有对象都会收到release 消息并从内存中释放。为了回答您的问题,假设对象在某个时候没有保留,那么该对象将在内存中停留的时间与池一样长。

    可以在Memory Management Programming GuideAutorelease Pools 部分找到更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-04
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多