Установить стиль TextView (жирный или курсив)

Objective-C использует подсчет ссылок , что означает, что каждый объект имеет счетчик ссылок. Когда объект создается, он имеет счетчик ссылок «1». Проще говоря, когда объект ссылается (т. Е. Где-то где-то), он получает «сохраненный», что означает, что его счетчик ссылок увеличивается на единицу. Когда объект больше не нужен, он «освобождается», что означает, что его количество ссылок уменьшается на единицу.

Когда счетчик ссылок объекта равен 0, объект освобождается. Это основной подсчет ссылок.

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

Типичным способом написания метода является:

id myVar = [someObject someMessage];
.... do something ....;
[myVar release];
return someValue;

Проблема необходимости запоминать любые приобретенные ресурсы внутри кода является утомительным и подверженным ошибкам. Objective-C вводит еще одну концепцию, направленную на то, чтобы сделать это намного проще: Autorelease Pools. Пулы Autorelease - это специальные объекты, которые устанавливаются в каждом потоке. Это довольно простой класс, если вы посмотрите NSAutoreleasePool.

Когда объект получает сообщение «autorelease», отправленное ему, объект будет искать любые пулы автозаполнения, которые находятся в стеке для этого текущего потока. Он добавит объект в список в качестве объекта для отправки сообщения «release» в какой-то момент в будущем, что обычно происходит при выпуске самого пула.

. Принимая код выше, вы можете переписывайте его, чтобы быть короче и легче читать, говоря:

id myVar = [[someObject someMessage] autorelease];
... do something ...;
return someValue;

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

Надеюсь, это поможет. Статья в Википедии довольно хороша в подсчете ссылок. Более подробную информацию о пулах autorelease можно найти здесь . Также обратите внимание, что если вы создаете Mac OS X 10.5 и более поздние версии, вы можете сказать, что Xcode для сборки с включенной сборкой мусора позволяет полностью игнорировать сохранение / освобождение / автоопределение.

778
задан Niranj Patel 14 December 2015 в 06:21
поделиться