W swoim interfejsie możesz formalnie zadeklarować zmienną instancji między nawiasami klamrowymi, @propertypoza 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ć @synthesizemetodę 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ć @synthesizei 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 managedObjectContextwłaściwości, która jest ładowana leniwie. W ten sposób deklarujesz swoją managedObjectContextjako właściwość, ale następnie piszesz również -(NSManagedObjectContext *)managedObjectContextmetodę. Przypomnij sobie, że metoda, która ma taką samą nazwę jak zmienna / właściwość instancji, jest metodą „pobierającą”.
Metoda @propertydeklaracji umożliwia również inne opcje, takie jak retaini readonly, których nie ma metoda deklaracji zmiennej instancji. Zasadniczo ivarjest to stary sposób i @propertyrozszerza 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 ivars 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ć @synthesizew swojej implementacji bez odpowiedniego pliku @property. Syntezator zna tylko typ atrybutu ze @propertyspecyfikacji. 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ążą.