2011-07-26 14 views

Odpowiedz

10

Uważaj na termin "skalarny". Właściwość NSString * jest również wskaźnikiem, dokładnie tak jak w przykładzie, który podano wskaźnikiem do BOOL.

Od docs Apple: (The Objective-C Programming Language)

Jeśli podasz retain lub copy i nie określają nonatomic, wówczas w środowisku odniesienia liczone, zsyntetyzowany uzyskać akcesor dla obiektu używa zamka zamka i zachowuje i autoreleaseuje zwróconą wartość lementation będzie podobny do następującego:

[_internal lock]; // lock using anobject-levellock
id result = [[value retain] autorelease];
[_internal unlock];
return result;

Nie można zastosować blokadę na poziomie obiektu w coś, co nie jest przedmiotem, więc (nie) atomowy we właściwościach typów pierwotnych zasadniczo nie ma żadnego efektu.

Można stwierdzić, że atomowy odnosi się tylko do właściwości obiektów, a to jest wzmocniona w docs:

Jeśli podasz nonatomic, a zsyntetyzowany akcesor dla własności obiektu prostu zwraca wartość bezpośrednio.

Aby wyjaśnić, czy należy podać jedną lub drugą stronę: technicznie, właściwości bez nonatomic są uważane atomowy, ale należy pamiętać, że to nie ma żadnego znaczenia dla prymitywnych typów. W związku z tym możesz chcieć zapisać pewne pisanie i unikać w nich nonatomic.

+0

Ups. Chciałem zrobić te wartości BOOL, a nie wskaźniki. Aktualizuję ... – ma11hew28

+0

Nadal jestem trochę niejasna. Więc nie powinienem określać "nieatomowy" dla typów pierwotnych? – ma11hew28

+0

Naprawdę nie musisz mieć żadnych atrybutów dla typów pierwotnych. Mówi tylko, że potrzebujesz tylko nieatomowych obiektów, a nie prymitywnych typów. Tak więc @property BOOL someBool; działa w porządku. –

-1

Z Developer Documentation

nonatomic Określa, że ​​Akcesory są nonatomic. Domyślnie, akcesory są atomowe.

Właściwości atomowe zapewniają, że otrzymasz lub ustawisz całą wartość. Na przykład ustawienie CGRect z 2 wątków zakończy się na jednej lub drugiej, a nie na pewnej kombinacji tych dwóch.

Dla zachowanych właściwości zapewnia również, że wynik może przeżyć odbiornik. Na przykład, otrzymasz wynik z obiektu, który jest zwalniany przez inny wątek przed zakończeniem połączenia, ale wynik jest zachowywany i autorejestrowany w twoim imieniu, więc nadal jest prawidłowy.

+1

Czy nawet przeczytałeś pytanie? – ma11hew28

+1

Czy przeczytałeś dokumentację? Odpowiedź znajduje się w cytacie z dokumentacji - wszyscy uzyskujący dostęp są atomami, bez względu na to, czy własność jest prymitywna czy nie. – drawnonward