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 an
object-level
lock
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
.
Ups. Chciałem zrobić te wartości BOOL, a nie wskaźniki. Aktualizuję ... – ma11hew28
Nadal jestem trochę niejasna. Więc nie powinienem określać "nieatomowy" dla typów pierwotnych? – ma11hew28
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. –