Каков правильный атрибут для установщика / получателя для int? - PullRequest
3 голосов
/ 14 июля 2011

Я видел несколько разных способов присваивать / синтезировать int, но я не знаю, как правильно.

Я обычно делаю:

@property (nonatomic, assign) int myInt

Но я видел, как люди используют:

@property (nonatomic) int myInt
@property int myInt

Какой путь верен?

Ответы [ 4 ]

3 голосов
/ 14 июля 2011

Вот отличный пост о разнице между atomic и nonatomic:

Предполагая, что вы @ynthesizing реализации метода, атомарный против неатомарных изменений сгенерированного кода. Если вы пишете свой собственный сеттер / геттеры, атомарные / неатомные / сохранить / назначить / копировать просто консультативный.

С атомарным, синтезированный сеттер / геттер обеспечит значение всегда возвращается из получателя или устанавливается установщиком, независимо от активности сеттера в любом другом потоке. То есть если нить A находится в середине геттера, в то время как поток B вызывает сеттер, Фактическое жизнеспособное значение - объект с автоматически выпущенным кодом, скорее всего - будет вернулся к звонящему в А.

В неатомной промышленности такие гарантии не предоставляются. Таким образом, неатомный значительно быстрее, чем атомный.

То, что не делает Atomic, это делает какие-либо гарантии безопасности потоков. Если поток A вызывает геттер одновременно с потоками B и C Вызов установщика с разными значениями, поток А может получить любой из три возвращенных значения - одно до вызова любых сеттеров или любое из значений, переданных в установщики в B и C. Аналогично, объект может в конечном итоге получить значение из B или C, невозможно сказать.

Обеспечение целостности данных - одна из основных задач многопоточное программирование - достигается другими средствами.

Обратите внимание, что по умолчанию atomic, поэтому последний пример эквивалентен

@property (atomic) int myInt

Другое значение по умолчанию - assign, поэтому эти два параметра эквивалентны:

@property (nonatomic, assign) int myInt
@property (nonatomic) int myInt

И, аналогично, следующие также эквивалентны

@property (atomic, assign) int myInt
@property (atomic) int myInt

РЕДАКТИРОВАТЬ: Как указывает Джош, включение atomic является гипотетическим примером.

0 голосов
/ 10 октября 2012

@ property (nonatomic, assign) int myVariable;

всегда помните, что assign будет использоваться для примитивных типов данных, таких как int, bool

0 голосов
/ 14 июля 2011

Это скорее вопрос стиля, чем вопрос технической корректности. Для типа int единственное, что имеет для истинности модификатора assign (потому что вы не сохраняете скаляры). В противном случае это зависит от контекста: чтение или только чтение, атомарное или неатомное, это зависит от приложения.

Обратите внимание, что если вы не укажете модификатор, применяется значение по умолчанию (atomic, readwrite, assign). Итак, ваш первый ваш первый пример идентичен, а третий отличается только атомарностью.

0 голосов
/ 14 июля 2011

значения по умолчанию назначаются и атомные

...