-(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];
}
这种释放是否正确?
答案 0 :(得分:2)
在iOS中运行循环等待某些事件发生并对其进行操作。运行循环是一个事件处理循环,用于计划工作并协调传入事件的接收。运行循环的目的是在有工作时保持线程忙,并在没有线程时让线程进入休眠状态。
您需要在方法中创建自动释放池,否则它只会在事件循环的开头创建并在事件循环结束时排空。
答案 1 :(得分:1)
当你autorelease
一个对象时,它被添加到自动释放池并排队等待释放。释放自动释放池后,池中的所有对象都会发送release
消息,并从内存中释放。要回答你的问题,只要池没有,对象就会保留在内存中,假设它在某个时刻没有保留。
有关此内容的更多信息,请参见Autorelease Pools的Memory Management Programming Guide部分。