2011-08-16 10 views
16

Widziałem readwrite na int, BOOL itp tak samo jak nonatomic, przypisać.Jaka jest różnica między właściwością readwrite a nieatomową właściwością assign?

Jestem trochę, co mylić w tej sprawie. Wiem, że na obiektach nienatywnych zwykle zachowujemy się bezatomowo.

+0

Patrz także: [atomowej vs właściwości nonatomic] (http://stackoverflow.com/questions/588866/atomic-vs-nonatomic-properties) – PengOne

+0

Patrz także : cel c 101 (retain vs assign) @ http://stackoverflow.com/questions/1380338/objective-c-101-retain-vs-assign-nsstring –

Odpowiedz

15

readwrite oznacza, że ​​istnieje zarówno getter, jak i seter; odwrotnie jest readonly. Zwykle jedynym wyraźnym deklarowaniem właściwości readwrite jest rozszerzenie klasy dla klasy, w której interfejs publiczny deklaruje właściwość readonly - tak, że jest publicznie dostępny tylko do odczytu, ale wewnętrznie można zarówno uzyskać, jak i ustawić.

+2

bardzo dobra odpowiedź. ważne jest, aby wiedzieć, kiedy 'readwrite' powinno być używane –

+0

@Chuck, setter readwrite będzie równoznaczny z seterem lub retainer's setter? –

+0

@VishalSingh: 'readwrite' nie określa zarządzania pamięcią. Należy również * również * wymienić atrybut zarządzania pamięcią dla właściwości. – Chuck

30

Oto krótka odpowiedź:

atomic vs nonatomic przede wszystkim zapewnia kompletne wartości są zwracane z syntetyzowanych pobierające i że kompletne wartości są zapisywane przez syntetyzowanych ustawiaczy

readwrite vs readonly określa, czy (atomowy jest domyślne). zsyntetyzowana właściwość ma zsyntetyzowany accessor lub nie (readwrite ma ustawnik i jest domyślny, readonly nie).

assign vs retain vs copy określa sposób zsyntetyzowane Akcesory współdziałać z systemem zarządzania pamięcią Objective-C:

  • assign jest domyślnym i po prostu wykonuje przypisanie zmiennej
  • retain Określa nową wartość powinna być wysłany -retain na przydział i stara wartość wysłana -release
  • copy określa, że ​​nowa wartość powinna zostać wysłana -kopia przy przydziale i stara wartość wysłana -release.
+0

+1 dziękuję bardzo za to :) – swiftBoy

15

Po przeczytaniu wielu artykułów, więc posty i wykonane aplikacje demo aby sprawdzić zmiennych atrybutów własności, postanowiłem umieścić wszystkie informacje atrybuty razem

  1. atomowy // Wartość domyślna
  2. nonatomic
  3. strong = retain // default
  4. weak = unsafe_unretained
  5. zatrzymaj
  6. przypisać // domyślna
  7. unsafe_unretained
  8. kopia
  9. readonly
  10. readwrite // domyślna

więc poniżej jest szczegółowe powiązanie artykuł, gdzie można znaleźć wszystkie wyżej wymienione cechy, które napewno pomogą ty. Wielkie dzięki dla wszystkich ludzi, którzy udzielają tutaj najlepszych odpowiedzi !!

Variable property attributes or Modifiers in iOS

  1. zachowują = silny
    • jest zachowana, stara wartość zostanie zwolniony i jest przypisany
    • zachować określa nową wartość należy przesłać -retain na zlecenie i stara wartość wysłana -odpowiedź
    • retain jest taki sam jak silny.
    • jabłko mówi, że jeśli napiszesz, zachowaj, to automatycznie się skonwertuje/działa jak tylko silne.
    • metody typu "Alloc" obejmują ukrytą "utrzymać"

przykład:

@property (nonatomic, retain) NSString *name; 

@synthesize name; 
  1. przypisać
    • przypisanie jest domyślny i po prostu wykonuje przypisanie zmiennej
    • assign jest atrybutem właściwości, który mówi kompilatorowi, jak zsyntetyzować implementację ustawiającego właściwości.
    • Użyłbym przydzielić dla właściwości pierwotnych C i słabych dla słabych odniesień do obiektów Objective-C.

Przykład:

@property (nonatomic, assign) NSString *address; 

@synthesize address; 
  1. readonly

    • deklarując swoją nieruchomość jako tylko do odczytu poinformować kompilator nie wygeneruje metody setter automatycznie.
    • Wskazuje, że właściwość jest tylko do odczytu.
    • Jeśli określisz tylko do odczytu, w bloku @implementacja wymagana jest tylko metoda pobierająca. Jeśli użyjesz dyrektywy @synthesize w bloku @implementation, syntetyzowana zostanie tylko metoda getter. Co więcej, jeśli spróbujesz przypisać wartość przy użyciu składni kropkowej, pojawi się błąd kompilatora.

przykład:

@property (nonatomic, readonly) NSString *name; 

@synthesize name; 
  1. ReadWrite
    • setter gettera wygenerowany.
    • Wskazuje, że właściwość należy traktować jako odczyt/zapis.
    • Ten atrybut jest domyślny.
    • Obie metody getter i setter są wymagane w bloku @implementation. Jeśli użyjesz dyrektywy @synthesize w bloku implementacji , metody getter i setter zostaną zsyntetyzowane.

przykład:

@property (nonatomic, readwrite) NSString *name; 

@synthesize name; 
+3

słaby! = Unsafe_unretained – jrturton

+0

@jrturton Przeczytaj [this] (http://stackoverflow.com/questions/9784762/strong-weak-retain-unsafe-unretained-assign) i [this] (http://stackoverflow.com/questions/11121839/differences-between-weak-and-unsafe-unretained) i popraw mnie Jeśli się mylę !! – swiftBoy

+2

Drugi link mówi wszystko. unsafe_unretained nie usuwa odwołania, gdy jest deallocated, więc pozostaje ci z wiszącym wskaźnikiem, podczas gdy słaba właściwość jest ustawiona na zero, gdy obiekt jest dezalokowany. Pre-ios 4.3, słabe nie było obsługiwane. – jrturton

Powiązane problemy