2012-02-03 20 views
5

Rozumiem powód, dla którego powinienem używać zachować, ale dlaczego miałbym kiedykolwiek używać przypisania? (oprócz uniknąć zatrzymywania cykli)Kiedy należy użyć przypisania w Objective c?

[EDIT] Więc jeśli mogę zrozumieć odpowiedź Chucka na https://stackoverflow.com/questions... poprawnie, gdy kiedykolwiek używam przypisać zmienna straci zakres raz robi z zakresu metody tylko tak jak w zwykłym języku C?

+2

Istnieje podobne pytanie z dobrą odpowiedzią tutaj: http://stackoverflow.com/questions/1380338/objective-c-101-retain-vs-assign-nsstring – RaysonK

+0

@RaysonK szkoda, żadna z odpowiedzi nie została zaakceptowana . – crashmstr

+0

dodano modyfikację do mojego oryginalnego pytania – stackoverflow

Odpowiedz

12

Powinieneś przypisać rzeczy, które nie są obiektami. Dowolny typ C (taki jak int, float, char, double, struct i enum) powinien zostać przypisany.

+0

i ważni delegaci – vikingosegundo

+0

dodano zmianę do mojego pierwotnego pytania – stackoverflow

+0

Czy nie przypisuje się wartości domyślnej? –

2

Kilka przykładów można myślę:

  1. To nie jest obiektem. Takie jak BOOL int
  2. Większość czasu właściwości delegate przypisanych (aby zapobiec cykli)
+0

delegaci są słabe –

1
  1. wszystkiego, co nie jest przedmiotem
  2. Delegaci
  3. IBOutlets które nie są wysokiego poziomu (tj subviews, ponieważ te zostały już zachowane w widoku).
+0

dodany edytuj do mojego pierwotnego pytania – stackoverflow

1

Zakładając, że odpowiedź Chucka z połączonego pytania jest prawidłowa, w Celu C nie ma "zakresu". Wygląda na to, że powinieneś po prostu użyć assign dla wszystkich prymitywów, takich jak int lub BOOL. Wszystko, co musisz posiadać, użyj retain (lub innych poleceń, jak opisuje Chuck).

+0

Ok. Rozumiem, że muszę przypisać dla prymitywów. Teraz co, jeśli użyję przypisania dla obiektu. Czy twierdzisz, że ten obiekt nie jest gwarantowany, mimo że nie został zachowany? – stackoverflow

+0

Nie mogę powiedzieć na pewno, ponieważ wynika to z tego, co powiedział inny użytkownik, ale w pobliżu, jak mogę powiedzieć, pozostawiasz go programowi, aby zdecydować, kiedy użyta zostanie dana zmienna. Ktoś mnie poprawi, jeśli się mylę, ale myślę, że 'assign' oznacza, że ​​zmienisz wartość zmiennej. – RaysonK

Powiązane problemy