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

这种释放方式是否正确?

4

2 回答 2

2

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

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

检查这个。运行循环结束——自动释放池恢复

于 2011-05-30T12:12:31.130 回答
1

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

更多信息可以在内存管理编程指南的自动释放池部分找到。

于 2011-05-30T05:53:15.927 回答