Teraz odnosząc się do tej definicji interfejsu:
@interface MYViewController()
@end
To jest technicznie rozszerzenie klasy zamiast kategorii. Kategorie zawierają ciąg w nawiasach. Rozszerzenia klasy są dodawane do klasy w czasie kompilacji, więc mogą dodawać ivars (zwykle w postaci właściwości). Kategorie są dodawane w czasie wykonywania i nie mogą dodawać znaków iv.
Wszystko, co powiedzieliśmy, twoja uwaga jest prawidłowa. Służy do definiowania prywatnych metod i właściwości.
W świecie ObjC "prywatny" to znak "zakaz wstępu", a nie ściana z drutu brzytwego. Chociaż istnieje słowo kluczowe @private
(które dodaje wymuszenie kompilatora), dotyczy to tylko ivars i generalnie nie jest konieczne. Ten rodzaj prywatności opartej na ostrzeżeniach działa bardzo dobrze w ObjC i jest dość wystarczający.
Umieść swoje prywatne właściwości w tym rozszerzeniu klasy, a rozmówcy zewnętrzni otrzymają ostrzeżenia "mogą nie odpowiadać na selektor", jeśli spróbują uzyskać do nich dostęp (tak, jak mogliby uzyskać wywołanie dowolnej niezdefiniowanej metody). Nigdy nie należy zezwalać na istnienie ostrzeżeń w projekcie ObjC, co wymusza hermetyzację danych.
EDIT
Jeśli są prywatne, to powinny one nie pojawiają się w Twojej podklasy. To, czego chcesz, jest chronione. W ObjC nie ma świetnego schematu dla metod chronionych, ale powszechną techniką jest umieszczanie ich w kategorii w pliku .h, takim jak MYViewController + Protected.h. Uważam, że pojawia się to bardzo rzadko w praktyce, ponieważ tyle dobrego projektu ObjC nie ma podklasy. Zamiast tego używa kompozycji i delegacji.
Odnośnie "Po prostu zobacz kontrolerów." Po pierwsze, to nie tylko kontrolery widoku. To tylko kontrolery widoku na iOS (dobrze, VC, TableViewController i GLKViewController). Na Macu to także kontrolery okien i importery spotlightów.Zajrzyj:
.../Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates
.../Library/Xcode/Templates
Ale dlaczego te? Cóż, to są kontrolery, a kontrolerzy potrzebują prywatnej własności. W rzeczywistości, jeśli nie masz prywatnych właściwości w kontrolerze, prawdopodobnie robisz zbyt dużo publicznych. To nie jest tak uniwersalne dla klas modelu i widoku. Podejrzewam, że zagrał w ich decyzji. Mogą to być również inne osoby, które posiadały szablony lub które były aktualizowane w różnym czasie. Czasami widzisz małe niespójności, które z czasem wygładzają się.
Można również tworzyć własne szablony. Zobacz Creating Custom Xcode 4 File Templates.
Odpowiedź Roba była dobra, ale ... Czy ktoś ma pojęcie, dlaczego XCode generuje to tylko dla podklas UIViewController i nie wszystkie klasy? (Może to zrobić dla niektórych innych, ale standardowe klasy, które rozszerzam, nie wyświetlają tego zachowania). – VaporwareWolf