W ogóle, należy zdecydować pomiędzy weak
, strong
, assign
i copy
patrząc na relacje między klasą posiadającą właściwości i wartości tej nieruchomości, a także od rodzaju własności podjęcia.
- Jeśli właściwość jest ustawiona jest prymitywny, użyj
assign
(lub nie stosować kwalifikator własności w ogóle)
- Jeśli właściwość jest ustawiona jest skalar, niezmienny obiekt, użyj
strong
- Jeśli właściwość bycia zestaw jest skalarne, zmienny obiekt wdrażania protokołu
NSCopying
użyć copy
- Jeśli właściwość jest ustawiona jest zmienny, a prawo własności jest przenoszone do obiektu, użyj
strong
- Jeśli właściwość jest ustawiona jest zmiennym obiektem implementującym protokół
NSCopying
, ale prawo własności pozostaje w stosunku do wywołującego, należy użyć copy
- Jeśli ustawiana właściwość jest odwołaniem zwrotnym (tj. właściwość "to parent" w obiekcie "child"), użyj
weak
.
Koncepcja własności jest bardzo ważna w referencyjnych modelach zliczanych pamięci. Jest to główny czynnik decydujący o twojej decyzji. Musisz zdecydować, gdzie jest główny właściciel obiektu, i dać mu silne referencje. Jeśli własność jest wspólna dla grupy obiektów, daj wszystkim silną referencję.
Najtrudniejsza sytuacja to sytuacja, w której obiekty mogą się nawzajem, bezpośrednio lub pośrednio.W takim przypadku lepiej byłoby zastąpić "własność" słowem "wie o", dać wszystkim obiektom wspólny "top" właściciela, który "posiada" wszystkich i modelować relacje "wie o" z referencjami weak
.
Głosowanie w celu ponownego otwarcia. Nie sądzę, że zamknięcie tego jako duplikatu było dobrym wezwaniem: głównym problemem tego pytania jest * użycie * silnego lub słabego, podczas gdy centralnym problemem drugiego pytania jest * zachowanie * silnego vs. słaby. – dasblinkenlight
@dasblinkenlight Nie zmienia to faktu, że jest to niezarejestrowana ankieta. Nie należy go zamykać jako duplikatu, ale jako "zbyt szeroki". –