-(void)returnString
{
NSString *str=[[NSString alloc]init];
return [str autorelease];
}
-(void)getString
{
NSString *p=[self returnString];
}下面是字符串str的生命周期。str的retainCount何时会变为零。我知道在运行循环结束时,它的保留计数将变为零。运行循环的结束是否意味着调用returnString的函数的结束。如果不是,那么运行循环意味着什么,运行循环结束意味着什么。
-(void)returnString
{
NSString *str=[[NSString alloc]init];
return str;
}
-(void)getString
{
NSString *p=[self returnString];
[p release];
}这种释放方式是正确的还是错误的?
发布于 2011-05-30 20:12:31
iOS中的Run循环等待某些事件发生并对其执行操作。运行循环是一个事件处理循环,用于安排工作并协调传入事件的接收。运行循环的目的是让线程在有工作要做时保持忙碌,在没有工作时让线程进入睡眠状态。
您需要在您的方法中创建自动释放池,否则它只会在事件循环开始时创建,并在事件循环结束时排出。
发布于 2011-05-30 13:53:16
当您autorelease一个对象时,它会被添加到自动释放池中并排队等待释放。当自动释放池被释放时,池中的所有对象都会被发送一条release消息,并从内存中释放。为了回答您的问题,假设对象在某一时刻没有被保留,那么对象在内存中的停留时间和池一样长。
有关这方面的更多信息,可以在Memory Management Programming Guide的Autorelease Pools部分找到。
https://stackoverflow.com/questions/6172644
复制相似问题