Що означає "неатомічний" у цьому коді?
@property(nonatomic, retain) UITextField *theUsersName;
Яка різниця між атомним і неатомним?
Дякую
Що означає "неатомічний" у цьому коді?
@property(nonatomic, retain) UITextField *theUsersName;
Яка різниця між атомним і неатомним?
Дякую
Відповіді:
Погляньте на Документи Apple .
В основному, якщо ви говорите nonatomic
, і ви генеруєте аксесуари, використовуючи @synthesize
, то, якщо кілька потоків намагаються змінити / прочитати властивість одночасно, може статися неприємність. Ви можете отримати частково записані значення або перезапущені / утримувані об'єкти, що може легко призвести до збоїв. (Однак це потенційно набагато швидше, ніж атомний аксесуар.)
Якщо ви використовуєте за замовчуванням (який є atomic
; раніше для цього не було ключового слова, але зараз існує ), то в @synthesize
методах d використовується блокування об'єктного рівня, щоб забезпечити серіалізацію читання / запису в одне властивість. Як вказують документи Apple, це не означає, що весь об'єкт є безпечним для потоків , але окремі властивості читаються / записуються.
Звичайно, якщо ви реалізуєте свої власні аксесуари, а не використовуєте @synthesize
, я думаю, що ці декларації не роблять нічого, крім висловлення ваших намірів щодо того, чи властивість реалізована в безпечному режимі.
atomic
дозволяє уникнути збоїв під час доступу до окремих властивостей, але не гарантує, що об'єкт в цілому (тобто доступ до окремих властивостей, таких як імена та прізвища) буде робити. правильна річ.
Прочитавши стільки статей та публікацій StackOverflow і зробивши демонстраційні програми для перевірки атрибутів змінних властивостей, я вирішив зібрати всю інформацію про атрибути разом
тому нижче - докладне посилання на статтю, де ви можете знайти вищезазначені атрибути, які точно допоможуть вам. Велике спасибі всім людям, які дають найкращі відповіді тут !!
Приклад:
@property (retain) NSString *name;
@synthesize name;
Приклад:
@property (nonatomic, retain) NSString *name;
@synthesize name;
На додаток до того, що вже було сказано про безпеку різьби, неатомні властивості швидші, ніж атомні аксесуари. Зазвичай це не про що потрібно турбуватися, але пам’ятайте про це. З цієї причини генеровані основні властивості даних частково неатомічні.
Якщо ви вказали "атомний", згенеровані функції доступу мають додатковий код для захисту від одночасного оновлення.
Зазвичай атомні засоби, що записує / читає властивість, відбувається як одна операція. Atomic_operation
Ви можете отримати впоратися з цим продуктом, прочитавши статтю нижче.
Нитка Пояснюється з неатомною метою
неатомічний - Не безпечний для нитки
atomic - Thread Safe - це атрибут властивості за замовчуванням.
У «атомарних» означає , що доступ до властивості потокобезпечна. В той час як "неатоміческое" протилежний йому. Коли ви оголошуєте властивість в Objective-C властивість атомарному за замовчуванням , так що синтезовані аксессор забезпечують надійний доступ до власності у багатопотоковому середовищі - тобто значення, повернене з getter або встановленим через сеттер, завжди повністю витягується або встановлюється незалежно від того, які інші потоки виконуються одночасно. Але якщо ви оголошуєте властивість неатомічним, як нижче
@property (nonatomic, retain) NSString *myString;
то це означає, що синтезований аксесуар для властивості об'єкта просто повертає значення безпосередньо. Ефект неатомічного атрибута залежить від середовища. За замовчуванням синтезовані аксесуари є атомними. Тож неатомічний значно швидший, ніж атомний.
Один призначений для декількох ниток. Один хіба що