Ответы выше дают ясные повторные заявления того, что говорит документация; проблемой, с которой сталкиваются самые новые люди, являются недокументированные случаи. Например:
Автовыпуск : в документах говорится, что это инициирует выпуск "в какой-то момент в будущем". КОГДА?! В основном можно рассчитывать на объект, являющийся вокруг, пока Вы не выходите из своего кода назад в цикл системного события. Система МОЖЕТ выпустить объект любое время после цикла текущего события. (Я думаю, что Matt сказал это, ранее.)
Статические строки : NSString *foo = @"bar";
- необходимо ли сохранить или выпустить ли это? Нет. Как насчет [1 118]
-(void)getBar {
return @"bar";
}
...
NSString *foo = [self getBar]; // still no need to retain or release
Правило Создания: при создании его Вы владеете им и, как ожидают, выпустите его.
В целом, способ, которым испорчены новые программисты Cocoa, не понимая, какие стандартные программы возвращают объект с retainCount > 0
.
Вот отрывок от Очень Простые Правила Для управления памятью В Какао :
правила количества Хранения
- В данном блоке, использовании - копия, - который сохраняет выделение и - должна равняться использованию - выпуск и-autorelease.
- Объекты, созданные с помощью конструкторов удобства (например, stringWithString NSString), считают автовыпущенными.
- Реализация-dealloc метод для выпуска instancevariables Вы владеете
, 1-й маркер говорит: если Вы звонили alloc
(или new fooCopy
), Вам нужно к разъединению вызова на том объекте.
2-й маркер говорит: если Вы используете конструктора удобства , и Вам нужен объект бродить вокруг (как с изображением, которое будет оттянуто позже), необходимо сохранить (и затем более поздний выпуск) его.
3-е должно быть очевидным.
Для нескольких языков обратите внимание на класс ResourceBundle .
О \ u4345
, это один из темных и очень раздражающие устаревшие уголки Java. Файлы свойств должны быть в кодировке ASCII, поэтому все символы, не относящиеся к ASCII, должны быть закодированы как \ uxxxx
(их значение в Юникоде). Вы можете преобразовать файл для использования этой кодировки с помощью инструмента командной строки native2ascii .
Если вы используете IDE или инструмент сборки, должна быть возможность автоматически вызывать это.
Если файл свойств - это то, что вы полностью контролируете, вы можете, начиная с Java6, также использовать UTF-8 (или любой другой другой набор символов) непосредственно в файле свойств, а указать эту кодировку при загрузке:
// new in Java6
props.load(new InputStreamReader(new FileInputStream(file), 'UTF-8'));
Опять же, это работает, только если вы загружаете Свойства самостоятельно, а не если это делает кто-то другой, например ResourceBundle (используется для интернационализации).
есть полный учебник по http://java.sun.com/docs/books/tutorial/i18n/index.html
Здесь уточняется и объясняется все, что вы нужно знать.
Учебник Java по i18n уже упоминался Питером. Если вы создаете JSP, вы, вероятно, захотите посмотреть JSTL , который в основном позволяет вам использовать функциональность ResourceBundle через теги JSP.