首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动释放对象的LifeTime

自动释放对象的LifeTime
EN

Stack Overflow用户
提问于 2011-05-30 13:41:10
回答 2查看 308关注 0票数 1
代码语言:javascript
复制
-(void)returnString
{
       NSString *str=[[NSString alloc]init];
       return [str autorelease];
}
-(void)getString
{
      NSString *p=[self returnString];
}

下面是字符串str的生命周期。str的retainCount何时会变为零。我知道在运行循环结束时,它的保留计数将变为零。运行循环的结束是否意味着调用returnString的函数的结束。如果不是,那么运行循环意味着什么,运行循环结束意味着什么。

代码语言:javascript
复制
-(void)returnString
{
      NSString *str=[[NSString alloc]init];
      return str;
}
-(void)getString
{
    NSString *p=[self returnString];
    [p release];
}

这种释放方式是正确的还是错误的?

EN

回答 2

Stack Overflow用户

发布于 2011-05-30 20:12:31

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

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

看看这个。End of run loop -- autorelease pool recovery

票数 2
EN

Stack Overflow用户

发布于 2011-05-30 13:53:16

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

有关这方面的更多信息,可以在Memory Management Programming GuideAutorelease Pools部分找到。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6172644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档