Nie jestem pewien, dlaczego to zrobili, ale jako ogólną dobrą praktykę, nie powinieneś robić tego sam. Plik nagłówkowy powinien być zarezerwowany dla publicznego interfejsu klasy. Umieszczaj tylko te rzeczy, które muszą wywoływać wywołujący i użytkownicy tej klasy, które na ogół będą właściwościami, metodami i być może stałymi
extern
.
Następnie pojawia się pytanie, czy użyć właściwości lub zwykłej zmiennej instancji. Jest to w dużej mierze zależne od preferencji. Niektórzy ludzie deklarują właściwości wszystkiego i nie używają w ogóle zwykłych kropek. Inni używają ivars dla wszystkiego i tylko właściwości, gdy chcą zadeklarować niestandardowy setter/getter dla danej zmiennej. Jestem w tym drugim obozie, ale można argumentować, że jest jaśniejszy i łatwiejszy do odczytania, jeśli wszystko jest tylko własnością.
edit
I błędne odczytanie kodu. To, co mówię powyżej, stoi normalnie, ale to, co robią, polega na tym, że eksponuje API, który różni się od danych podstawowych. Edytuję teraz odpowiedź.
Gdy deklarujesz właściwość bez niestandardowego @synthesize
i bez przesłonięcia zarówno settera, jak i gettera, jeśli są one odpowiednie, tworzona jest zmienna bazowa z podkreślnikiem z przodu. To, co robią, polega na zwracaniu wartości NSArray
w publicznym interfejsie API, aby upewnić się, że zmienna wewnętrzna nie jest modyfikowana, podczas gdy wewnętrznie używa się NSMutableArray
.
Powiedziałbym, że ogólnie rzecz biorąc, ta deklaracja zmiennej (NSMutableArray *_assets;
) powinna nadal znajdować się w pliku implementacji. Dzwoniący prawdopodobnie nie powinien wiedzieć, że jest zmienny pod maską.
Istnieje już wiele istniejących pytań dotyczących tego. Oto zapytanie z wieloma z nich: https://stackoverflow.com/search?q=mutable+ivar+immutable+property
Głosy i zamykane głosowanie są nieodpowiednie tutaj. Jest to całkowicie uzasadnione pytanie o coś specyficznego i subtelnego w jakimś kodzie, który nie jest oczywisty dla początkującego użytkownika. –
To jest dobre pytanie. Przeredagowałem ją nieco, by odeprzeć "opinię" blisko głosów. – vcsjones
IMHO na to pytanie trudno odpowiedzieć. Wymaga to zrozumienia doskonale kluczowych pojęć Obj-C: czym jest własność i czym jest ivar, jak własność jest syntetyzowana, co to jest interfejs, co jest kontynuacją klasy ... i musisz także coś wiedzieć o historii Obj-C. Niełatwe do wyjaśnienia początkującym. – Sulthan