Вопрос

Что означает «неатомарный» в этом коде?

@property(nonatomic, retain) UITextField *theUsersName;

В чем разница между атомарным и неатомным?

Спасибо

Это было полезно?

Решение

Взгляните на Apple Документы.

В принципе, если вы скажете nonatomic, и вы генерируете средства доступа, используя @synthesize, то если несколько потоков попытаются изменить/прочитать свойство одновременно, может произойти ошибка.Вы можете получить частично записанные значения или перевыпущенные/сохраненные объекты, что может легко привести к сбоям.(Однако потенциально это намного быстрее, чем атомарный метод доступа.)

Если вы используете значение по умолчанию (то есть atomic;раньше для этого не было ключевого слова, но есть сейчас), то @synthesizeМетоды d используют блокировку на уровне объекта, чтобы гарантировать сериализацию нескольких операций чтения/записи для одного свойства.Как отмечают документы Apple, это не означает, что весь объект является потокобезопасным, но чтение/запись отдельного свойства есть.

Конечно, если вы реализуете свои собственные средства доступа, а не используете @synthesize, я думаю, что эти объявления не делают ничего, кроме как выражают ваше намерение относительно того, реализовано ли свойство потокобезопасным способом.

Другие советы

Прочитав так много статей и сообщений StackOverflow, а также создав демонстрационные приложения для проверки атрибутов свойств переменных, я решил объединить всю информацию об атрибутах.

  1. атомарный // по умолчанию
  2. неатомный
  3. сильный = сохранить // по умолчанию
  4. слабый = unsafe_unretained
  5. удерживать
  6. назначить //по умолчанию
  7. unsafe_unretained
  8. копировать
  9. только для чтения
  10. чтение и запись // по умолчанию

поэтому ниже приведена подробная ссылка на статью, где вы можете найти все вышеупомянутые атрибуты, которые обязательно вам помогут.Большое спасибо всем людям, которые дают здесь лучшие ответы!

Атрибуты свойств переменных или модификаторы в iOS

  1. атомный
    • Атомный означает, что только один поток обращается к переменной (статический тип).
    • Atomic является потокобезопасным.
    • Но он медленный в производительности.
    • Атомный режим — поведение по умолчанию.
    • Атомарные методы доступа в среде без сборки мусора (т.е.при использовании сохранения/выпуска/автовыпуска) будет использовать блокировку, чтобы гарантировать, что другой поток не помешает правильной настройке/получению значения.
    • на самом деле это не ключевое слово.

Пример :

@property (retain) NSString *name;

@synthesize name;
  1. неатомный
    • Неатомарность означает доступ нескольких потоков к переменной (динамический тип).
    • Nonatomic является потокобезопасным.
    • Но он быстрый в производительности.
    • Неатомарность НЕ является поведением по умолчанию;нам нужно добавить неатомарное ключевое слово в атрибут свойства.
    • это может привести к неожиданному поведению, когда два разных процесса (потока) одновременно обращаются к одной и той же переменной.

Пример:

@property (nonatomic, retain) NSString *name;

@synthesize name;

В дополнение к тому, что уже было сказано о потокобезопасности, неатомарные свойства работают быстрее, чем атомарные методы доступа.Обычно вам не о чем беспокоиться, но имейте это в виду.По этой причине свойства, генерируемые Core Data, частично неатомичны.

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

Поэтому вам следует использовать мьютексы (или что-то в этом роде), если у вас есть критическая неатомарная операция, которую вы не хотите прерывать.

Если вы укажете «атомарный», сгенерированные функции доступа будут содержать дополнительный код для защиты от одновременных обновлений.

Обычно атомарность означает, что запись/чтение свойства происходит как одна операция.Атомная_операция

Вы можете получить представление об этом, прочитав статью ниже.

Потоки, объясненные с неатомной целью

неатомный — не потокобезопасный

атомный — потокобезопасный — это атрибут свойства по умолчанию.

А «атомный» означает, что доступ к свойству является потокобезопасным.в то время "неатомный" это противоположность этому.Когда вы объявляете свойство в Objective-C, свойство по умолчанию является атомарным, так что синтезированные средства доступа обеспечивают надежный доступ к свойству в многопоточной среде, то есть значение, возвращаемое из метода получения или устанавливаемое через метод установки, всегда полностью извлекается или устанавливается независимо от того, того, что другие потоки выполняют одновременно.Но если вы объявите свойство неатомным, как показано ниже

@property (nonatomic, retain)  NSString *myString;

тогда это означает, что синтезированный метод доступа к свойству объекта просто возвращает значение напрямую.Эффект неатомного атрибута зависит от окружающей среды.По умолчанию синтезированные методы доступа являются атомарными.Таким образом, неатомный процесс значительно быстрее атомного.

Один из них предназначен для нескольких потоков.Один не

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top