В моем приложении для iPhone я использовал несколько переменных nsstring для хранения значений. Но иногда его значение становится недействительным! Кто-нибудь знает, в чем причина? Или расскажите мне о ситуации, когда переменная nsstring становится недействительной?Иногда NSString становится недействительным?
ответ
сделал вам копия или сохраняют NSString?
Они автореализованы. Если вы создаете строку с использованием метода удобства (stringWithString, stringWithFormat), она будет добавлена в пул автозапуска.
Чтобы прекратить его выпуск, отправите ему сообщение сохранения и сообщение о выходе, когда вы закончите использовать его, чтобы освободить память. Вы также можете настроить свойства для этого полуавтоматически автоматически, когда вы назначаете строку переменной-члену
Здесь много статей по управлению памятью iPhone (и Mac) здесь, на SO и на сетках. Google для авторекламы.
NSString
s также являются объектами. Они придерживаются одинаковых правил управления памятью. Если вы нарушите эти правила, вы получите указатель на недопустимую память, и это будет выглядеть как «недействительные» данные.
Например:
myString = [NSString stringWithString:@"foo"];
Это создаст NSString*
, который получил autorelease на. Когда вы назначаете его ivar, пул авторезистов скоро поп положит счет возврата обратно на 0 и dealloc
, пока вы все еще имеете ссылку на него!
Naughty.
Вместо либо сохранить его или использовать:
myString = [[NSString alloc] initWithString:@""];
Это возвращает владеющую ссылку. Запомнить [myString release];
в dealloc
.
Это всего лишь один пример неудачного управления памятью. Прочтите документы о том, как правильно управлять жизненным циклом объекта. В самом деле.
Если это устройство с довольно ограниченными ресурсами, например, iPhone, вы должны использовать [[NSString alloc] init*]
по статическим методам удобства, так как вы будете оказывать меньшее давление на пул авторасчетов и снизить использование памяти. Пул сливается из каждого цикла сообщений, поэтому чем меньше объектов, тем лучше перечислять.
Вы также должны знать, что объекты автоопределения в цикле будут генерировать много мусора, если вы не управляете локальным пулом автоопределений.
Я задал тот же вопрос. И следующий ответ был лучшим из удобства. Просто используйте:
[myString retain];
А затем в методе dealloc (например viewDidUnload):
[myString release];
- 1. Закодированный nsstring становится недействительным, «нормальный» nsstring остается
- 2. onbackpress listview становится недействительным
- 3. Соединение RODBC становится недействительным
- 4. Почему access_token становится недействительным
- 5. Зашифрованный пароль становится недействительным
- 6. NSString неожиданно становится __NSCFDictionary
- 7. DateAxisItem иногда становится невидимым
- 8. Ток сеанса становится недействительным после сброса пула
- 9. Профиль профилей становится недействительным каждый день
- 10. Изменение векторной ссылки. Что становится недействительным?
- 11. Grails Почему мой кеш становится недействительным?
- 12. Код подтверждения не становится недействительным в wso2
- 13. Android BluetoothGatt становится недействительным при изменении активности
- 14. JWT становится недействительным после перезапуска сервера
- 15. Определения ассоциации вызывает Entity становится недействительным
- 16. Объект Realm становится недействительным в android
- 17. Https - токен становится недействительным после отключения интернета?
- 18. Значок несущей становится недействительным после повторного развертывания
- 19. write() вызывает фатальный сбой, когда filedescriptor становится недействительным
- 20. iOS: объект NSBundle становится недействительным после удаления и воссоздания папки
- 21. Почему мой NSString становится CGPath? Xcode, Titanium
- 22. 16 байт иногда становится 15 байт длина
- 23. PopupWindow фон иногда становится прозрачными и фиолетовый
- 24. Почему NSString иногда работает с знаком равенства?
- 25. Запрос ширины ширины CSS становится недействительным, когда высота <= ширина
- 26. Содержание SSBO становится недействительным после вызова функции C++
- 27. document.write становится недействительным в Javascript файле, который добавляется AppendChild
- 28. нг скрывать автоматически запуск на поле становится недействительным
- 29. При тиснении документа - Датские символы исчезают, а PDF становится недействительным
- 30. std :: список указателей становится недействительным при удалении записи
Ах, вы, казалось, бил меня к удару. Во всяком случае, вы, вероятно, хотите «остановить его« освобождение-освобождение », а свойства не сохраняются/освобождаются, если вы не используете self.property = foo вместо свойства = foo; Может быть, хорошо добавить это различие. – lhunath