W swoim interfejsie możesz formalnie zadeklarować zmienną instancji między nawiasami klamrowymi, @property
poza nawiasami klamrowymi lub jedno i drugie. Tak czy inaczej, stają się atrybutami klasy. Różnica polega na tym, że jeśli zadeklarujesz @property
, możesz zaimplementować @synthesize
metodę using , która automatycznie koduje twój getter / setter. Na przykład funkcja ustawiająca automatyczne kodowanie inicjalizuje liczby całkowite i przepływa do zera. JEŻELI zadeklarujesz zmienną instancji i NIE określisz odpowiadającej jej wartości @property
, nie możesz użyć @synthesize
i musisz napisać własny getter / setter.
Zawsze możesz nadpisać automatycznie zakodowany program pobierający / ustawiający, określając własny. Jest to często wykonywane w przypadku managedObjectContext
właściwości, która jest ładowana leniwie. W ten sposób deklarujesz swoją managedObjectContext
jako właściwość, ale następnie piszesz również -(NSManagedObjectContext *)managedObjectContext
metodę. Przypomnij sobie, że metoda, która ma taką samą nazwę jak zmienna / właściwość instancji, jest metodą „pobierającą”.
Metoda @property
deklaracji umożliwia również inne opcje, takie jak retain
i readonly
, których nie ma metoda deklaracji zmiennej instancji. Zasadniczo ivar
jest to stary sposób i @property
rozszerza go i sprawia, że jest bardziej wyszukany / łatwiejszy. Możesz odwołać się albo używając self. prefiks, czy nie, nie ma to znaczenia, o ile nazwa jest unikalna dla tej klasy. W przeciwnym razie, jeśli twoja nadklasa ma taką samą nazwę właściwości jak ty, musisz powiedzieć albo self.name albo super.name, aby określić, o której nazwie mówisz.
W ten sposób zobaczysz coraz mniej osób deklarujących ivar
s między nawiasami klamrowymi, a zamiast tego przesuniesz się w kierunku tylko określania @property
, a następnie wykonywania @synthesize
. Nie możesz tego zrobić @synthesize
w swojej implementacji bez odpowiedniego pliku @property
. Syntezator zna tylko typ atrybutu ze @property
specyfikacji. Instrukcja synthesize umożliwia również zmianę nazwy właściwości, dzięki czemu można odwoływać się do właściwości za pomocą jednej nazwy (skrótu) w kodzie, ale na zewnątrz w pliku .h użyj pełnej nazwy. Jednak dzięki naprawdę fajnemu autouzupełnianiu, które ma teraz XCode, jest to mniej korzystne, ale nadal istnieje.
Mam nadzieję, że pomoże to wyjaśnić wszelkie zamieszanie i dezinformację, które tam krążą.