Об использовании удобного метода и времени их авто-выпуска - PullRequest
0 голосов
/ 27 мая 2011

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

Я хочу вызвать метод "getString", чтобы вернуть отформатированную строку и установить мою метку следующим образом:

-(NSString*) getString {
  NSString *result = [NSString stringWithFormat:@"blah blah %@", someOtherString];
  return result;
}

-(void) viewDidLoad {
  someLabel.text = [self getString];
}

Этот код работал для меня, но я обеспокоен тем, что result выделяется удобным способом, поэтому может автоматически высвобождаться до того, как он будет сохранен меткой. Это правда? Если да, то когда именно будет выпущен объект из удобного метода?

Второй вопрос, если в этом случае мне нужно использовать [NSString alloc] для создания моего собственного строкового объекта. Где и как мне его выпустить?

Заранее спасибо Leo

Ответы [ 2 ]

3 голосов
/ 27 мая 2011

Неправда, что объект будет автоматически освобожден до того, как вы его сохраните. Подробные сведения о том, когда пул очищается, не важны для ответа на этот вопрос, за исключением того, что это не может произойти во время вашего кода , если вы не вызовите утечку или освобождение в пуле. Если ваша функция вызывает другую функцию, за исключением некоторых конкретных крайних случаев, и функция, которую вы вызываете, и функция, из которой вы вызвали, должны выйти, прежде чем этот поток сможет сделать что-то еще. Пул автоматического выпуска зависит от потока.

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

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

Этот код работал для меня, но я обеспокоен тем, что результат распределяется удобным способом, поэтому он может автоматически высвобождаться до того, как он будет сохранен меткой.

Да, он будет автоматически выпущен, потому что он возвращается методом, имя которого не содержит new, alloc или copy. Нет , этого не произойдет до того, как вызовет метод viewDidLoad.
На самом деле пул autorelease, к которому он добавлен, вероятно, будет тем, который был настроен и свернут runloop, поэтому с ним ничего не произойдет до конца текущей итерации в runloop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...