Что на самом деле делает следующая строка?
string = @"Some text";
Предположение, что "строка" объявляется таким образом в заголовке:
NSString *string;
Что делает "=", на самом деле делают здесь? Что это делает для "представления подсчета ссылок в виде строки"? В частности, при предположении, что по некоторым причинам "строке" иначе не присваивают, она должна быть выпущена?
Спасибо!
Можно назначить ему значение, специфичное для экземпляра объекта, что невозможно сделать со статической переменной класса.
-121--1886442-Две причины:
1) С точки зрения класса проектировать он позволяет программисту полагаться на то, что поле не изменится с момента создания экземпляра - так называемый « неизменяемый объект ». В учебном пособии Java говорится:
Незаменимые объекты особенно полезны в параллельных приложениях. Поскольку они не могут изменять состояние, они не могут быть повреждены в результате пересечения потоков или обнаружены в несогласованном состоянии.
Неизменяемые объекты являются краеугольным камнем различных стилей программирования, например, чистого функционального программирования.
2) Вторая причина - оптимизация JVM. Если все поля являются окончательными, то JVM знает, что состояние объекта не может быть изменено, и, таким образом, может выполнять множество оптимизаций, например, пропускать проверки безопасности резьбы и т.д.
-121--1886440- Назначение именно это. Указатель последовательностей
в основном является меткой, указывающей на конкретный адрес в памяти. Оператор переназначения указывает эту метку на другой адрес в памяти!
Он не изменяет счет ссылок и не делает ничего сверх этого в Objective-C. Если вы работаете в среде, не связанной с сбором мусора:
[string release];
string = [@"Some text" retain];
Однако управление строковыми литералами не требуется, так как они распределяются статически и никогда не освобождаются! Таким образом, методы выпуска
и сохранения
являются только NOOP (т.е. без операций). Их можно безопасно опустить.
Когда Вы используете буквально, как в данном случае, это просто синтаксический сахар для быстрого создания объекта NSString. После создания объект ведет себя так же, как и другой. Разница здесь в том, что Ваша строка компилируется в программе, а не создается динамически.
Что на самом деле делает следующую строку?
String = @ «Некоторые текст»;
Предполагая, что «строка» объявляется, таким образом, в заголовке:
NSString * String;
Что делает здесь «=» здесь? Что это делает для «строки» ссылочного значения?
строка
не является строкой.
Строка
, на самом деле, ни один другой вид объекта какао.
String
- это переменная, которую вы создали для удержания экземпляра NSString. Оператор присваивания ставит что-то в переменную *. В вашем примере выше вы создаете буквальную строку и поместите это в переменную.
С строки
- это переменная, а не объект какао, он не имеет ссылок.
Присвоение объекта где-то может продлить срок службы объекта в сборном мусоре (только на Mac). См. Руководство по программированию по управлению памятью для какао для более подробной информации.
* или A C Array. Не путайте их с массивами какао; Они не взаимозаменяемы, и вы не можете использовать оператор присваивания, чтобы положить вещи в коллекцию какао (в любом случае).