запрос относительно управления объектами NSString и управления памятью

У меня есть следующая часть кода:

NSString *tempString = [[выделение NSString] initWithFormat:@" %d / % d / % d", день, месяц, год];

dateString = tempString;

[выпуск tempString];

NSLog ("сохраняют счет datstring и tempstring, является %d и %d", [dateString retainCount], [tempString retainCount]);

NSLog ("% и %", dateString, tempString)

Теперь это печатает сохранить количество tempString как 1 (также dateString, сохраняют количество = 1) даже при том, что я выпускаю его в строке прежде. Также оператор NSlog, печатающий две строки ничего не отображает. Я предполагаю, что это вызвано тем, что, с тех пор моим кодом, dateString указывает на местоположение tempString, и tempString был выпущен, NSlog будет не мочь распечатать строку. Но затем почему сохранить количество tempString = 1?

Если я заменяю строку

dateString = tempString;

с

dateString = [NSString stringWithString: tempString];

затем оператор NSlog печатает значения и dateString и tempString и отображает их сохранять количества как 1. Как значение tempString распечатало, когда я выпускаю его в предыдущей строке?

1
задан Nathan 4 August 2010 в 09:38
поделиться

2 ответа

Когда вы отправляете релиз в tempString, среда выполнения objc просто вызывает dealloc. Тот факт, что объект был отправлен Dealloc, не означает, что его данные в куче немедленно уничтожаются. Он просто помечен для уничтожения позже.

0
ответ дан 2 September 2019 в 22:27
поделиться

Прочитайте документацию по iphone:

Вы не должны использовать retainCount для отладки проблем управления памятью.

Как утверждает jamapag, release просто говорит среде выполнения выполнить dealloc, что означает, что память помечена как многократно используемая, а не то, что она была очищена. Для объектов с retainCount, равным 1, среда выполнения обычно не уменьшает значение retainCount после dealloc.

Еще одно замечание: не следует посылать сообщения освобожденным объектам, как вы это делаете с retainCount, вы можете получить неожиданное поведение

2
ответ дан 2 September 2019 в 22:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: