LifeTime автоматически выпущенного объекта - PullRequest
1 голос
/ 30 мая 2011
-(void)returnString
{
       NSString *str=[[NSString alloc]init];
       return [str autorelease];
}
-(void)getString
{
      NSString *p=[self returnString];
}

Вот каково время жизни строки str. Когда будет retainCount из str станет ноль. Я знаю, что его счет удержания станет нулевым в конце цикла выполнения. Означает ли конец runloop конец функции, которая вызывает returnString. Если нет, что означает runloop и что означает конец runloop.

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

Правильный ли это тип выпуска или нет?

Ответы [ 2 ]

2 голосов
/ 30 мая 2011

Выполните цикл в iOS, ожидайте некоторых событий и воздействуйте на них.Цикл выполнения - это цикл обработки событий, который используется для планирования работы и координации приема входящих событий.Цель цикла выполнения состоит в том, чтобы сохранить ваш поток занятым, когда есть работа, и перевести ваш поток в спящий режим, когда его нет.

Вам необходимо создать пул автоматического выпуска в ваших методах, если нет, он будет создаваться только в начале цикла событий и сливаться в конце цикла событий.

Проверьте это. Конец цикла выполнения - автоматическое восстановление пула

1 голос
/ 30 мая 2011

Когда вы autorelease объект, он добавляется в пул автоматического выпуска и ставится в очередь для выпуска. После освобождения пула автоматического выпуска всем объектам в пуле отправляется сообщение release, и они освобождаются из памяти. Чтобы ответить на ваш вопрос, объект остается в памяти столько же, сколько и пул, при условии, что он не сохраняется в какой-то момент.

Дополнительную информацию об этом можно найти в разделе Авто-релизы в Руководстве по программированию управления памятью .

...