Эти свойства являются вспомогательными методами для создания геттеров и сеттеров.
Atmoic v Неатомные
Предполагая, что вы @synthesizing
реализации метода, атомарныепротив неатомарных изменений сгенерированного кода.Если вы пишете свой собственный метод set / getter, atomic / nonatomic / retain / assign / copy просто рекомендательный.
С помощью atomic синтезированный метод set / getter гарантирует, что целое значение всегда будет возвращено из метода get илиустанавливается сеттером, независимо от активности сеттера в любом другом потоке.То есть, если поток A находится в середине метода получения, а поток B вызывает метод установки, фактическое жизнеспособное значение - объект с автоматически освобожденным кодом, скорее всего, - будет возвращено вызывающей стороне в A.
Inнеатомные, такие гарантии не предоставляются.Таким образом, неатомарная значительно быстрее атомарной.
Чего не делает атомарная, так это не дает никаких гарантий безопасности потоков.Если поток A вызывает метод получения одновременно, а поток B и C вызывают метод установки с различными значениями, поток A может получить любое одно из трех возвращенных значений - одно до вызова любого метода установки или любое из значений, переданных в методы установкив B и C. Аналогичным образом, объект может в конечном итоге получить значение из B или C. Невозможно сказать.
Обеспечение целостности данных - одна из основных задач многопоточного программирования - достигаетсядругими способами.
Назначение, сохранение, копирование
В двух словах, назначение vs сохранение vs копия определяет, как синтезированные средства доступа взаимодействуют с Objective CСхема управления памятью:
- назначение является значением по умолчанию и просто выполняет присвоение переменной
- retain указывает, что новое значение должно быть отправлено -retain при назначении, а старое значение отправлено Release
- copy указывает, что новое значение должно быть отправлено -copy при назначении, а старое значение отправлено.
ReСохраняемый элемент выполняется для созданного объекта (это увеличивает количество ссылок), тогда как копия создает новый объект.Разница в том, хотите ли вы добавить еще одно сохранение к объекту или создать совершенно новый объект.