Co oznacza „nieatomowy” w tym kodzie?
@property(nonatomic, retain) UITextField *theUsersName;
Jaka jest różnica między atomową a nieatomową?
Dzięki
ios
objective-c
iphone
cocoa
properties
swiftBoy
źródło
źródło
Odpowiedzi:
Spójrz na Apple Docs .
Zasadniczo, jeśli powiesz
nonatomic
i wygenerujesz metody dostępu za pomocą@synthesize
, to jeśli wiele wątków spróbuje zmienić / odczytać właściwość jednocześnie, może się zdarzyć zło. Możesz uzyskać częściowo zapisane wartości lub nadmiernie zwolnione / zachowane obiekty, co może łatwo doprowadzić do awarii. (Jest to jednak potencjalnie dużo szybsze niż akcesorium atomowe).Jeśli używasz wartości domyślnej (czyli
atomic
; kiedyś nie było do tego słowa kluczowego, ale jest teraz ),@synthesize
metody d używają blokady na poziomie obiektu, aby zapewnić, że wiele odczytów / zapisów do jednej właściwości jest serializowanych. Jak wskazuje dokumentacja Apple, nie oznacza to, że cały obiekt jest bezpieczny dla wątków , ale poszczególne właściwości odczytują / zapisują.Oczywiście, jeśli implementujesz własne metody dostępu zamiast używać
@synthesize
, myślę, że te deklaracje nie robią nic poza wyrażeniem twojego zamiaru co do tego, czy właściwość jest implementowana w sposób bezpieczny dla wątków.źródło
atomic
pozwala uniknąć awarii podczas uzyskiwania dostępu do poszczególnych właściwości, ale nie gwarantuje, że obiekt jako całość (tj. Dostęp do oddzielnych właściwości, takich jak imię i nazwisko) będzie działać właściwa rzecz.Po przeczytaniu tak wielu artykułów i postów StackOverflow oraz po utworzeniu aplikacji demonstracyjnych do sprawdzania atrybutów właściwości zmiennych, postanowiłem zebrać wszystkie informacje o atrybutach
poniżej znajduje się szczegółowy link do artykułu, w którym można znaleźć wszystkie wymienione wyżej atrybuty, które z pewnością Ci pomogą. Wielkie dzięki dla wszystkich ludzi, którzy udzielają tutaj najlepszych odpowiedzi !!
Przykład:
Przykład:
źródło
Oprócz tego, co już powiedziano o bezpieczeństwie wątków, właściwości nieatomowe są szybsze niż atomowe akcesory. Zwykle nie musisz się tym martwić, ale miej to na uwadze. Właściwości generowane przez dane podstawowe są częściowo nieatomowe z tego powodu.
źródło
W programie wielowątkowym operacja atomowa nie może zostać częściowo przerwana, podczas gdy operacje nieatomowe tak.
Dlatego powinieneś używać muteksów (lub czegoś podobnego), jeśli masz krytyczną operację, która jest nieatomowa, której nie chcesz przerywać.
źródło
Jeśli określisz „atomic”, wygenerowane funkcje dostępu mają dodatkowy kod chroniący przed jednoczesnymi aktualizacjami.
źródło
Zwykle niepodzielny oznacza, że zapis / odczyt do właściwości odbywa się jako pojedyncza operacja. Atomic_operation
źródło
Możesz uzyskać dostęp do tych rzeczy, czytając poniższy artykuł.
Gwintowanie Wyjaśniono z celem nieatomowych
nieatomowy - nie bezpieczny wątkowo
atomic - Thread Safe - jest to domyślny atrybut właściwości.
źródło
W „atomowe” oznacza, że dostęp do posesji jest bezpieczny wątku. Natomiast «nonatomic» jest przeciwieństwem tego. Kiedy deklarujesz nieruchomość w Objective-C nieruchomości są atomowy domyślnie tak że syntetyzowane Akcesory zapewniają solidną dostęp do własności w środowisku wielowątkowym - to znaczy, że wartość zwracana z metody pobierającej lub ustawiana przez metodę ustawiającą jest zawsze w pełni pobierana lub ustawiana, niezależnie od tego, jakie inne wątki są wykonywane jednocześnie. Jeśli jednak zadeklarujesz właściwość jako nieatomową, jak poniżej
oznacza to, że zsyntetyzowany akcesor dla właściwości obiektu po prostu zwraca wartość bezpośrednio. Efekt atrybutu nieatomowego zależy od środowiska. Domyślnie zsyntetyzowane akcesory są atomowe. Tak więc nieatomowy jest znacznie szybszy niż atomowy.
źródło
Jeden jest przeznaczony dla wielu wątków. Jeden nie
źródło