Что значит retain в объявлении проперти?

Рейтинг: 0Ответов: 1Опубликовано: 27.01.2011

Прочитал, как могут параметризоваться проперти в Objective-C. С параметрами readonly, assign и copy все понятно. С nonatomic - не очень (вроде как аналог volatile в Java?), а вот с retain совсем плохо. Не могу понять, в каком случае мне надо использовать именно retain? В теме про управление памятью написано, что "требует увеличить счётчик ссылок". То есть если у нас retain стоит в объявлении проперти, то при каждом обращении к ней обязательно увеличивается счетчик ссылок (непонятно, зачем это надо тогда)?

Ответы

▲ 6Принят

retain, в отличие от copy не копирует объект при обращении к свойству, а увеличивает счетчик использований и возвращает тот же самый объект (как бы ссылку на объект). Это нужно, если объект большой или его не имеет смысла копировать. Например, объекты типа UIView, UIViewController, UIWindow.

Ключевое словом nonatomic означает, что при генерации реализаций сеттера и геттера (@synthesize) компилятор не будет вставлять блокировки для корректного обращения к свойству из разных потоков. То есть nonatomic означает "потоконебезопасный". nonatomic в большинстве случаев предпочтителен, т. к. сеттер и геттер работают быстрее.