Zazwyczaj, gdy podklasę klasy UI
będę wywoływał zainicjalizowany klasy nadklasy. Jednak nie jestem pewien szczegóły implementacji NSObject
i wydaje się, że nie ma wiele dzieje się w kategoriach vars członkowskich, więc zastanawiam się: czy muszę wywołać [super init]
, jeśli moja podklasa rozszerza NSObject
?Czy muszę wywołać [super init] lub [super initWithCoder], itp. Dla NSObject
Odpowiedz
Technicznie nie. documentation for -[NSObject init]
mówi, że
Sposób
init
zdefiniowane w klasieNSObject
robi żadnej inicjalizacji; po prostu zwracaself
.
Bo to jest udokumentowane i nie ma chyba już grono kodu, który polega na tym, że faktem jest, wysoce raczej się nie zmieni w przyszłych wersjach systemu Mac OS X.
Edit:BoltClock's a Unicorn przynosi do punktu, który chciałbym uczynić bardziej hiperbolicznym: całkowity czas zaoszczędzony przez niewywołanie -[NSObject init]
dla każdego, kto kiedykolwiek uruchomił twój program, nigdy nie przekroczy czasu debugowania, który ponosisz, jeśli kiedykolwiek zmienisz klasę nadrzędną dla twojej klasy na coś inny niż NSObject
i zapomnij dodać połączenie pod numer [super init]
.
Z documentation, to nie wydaje się, aby wykonywać żadnej inicjalizacji w ogóle:
Sposób
init
zdefiniowane w klasie NSObject robi żadnej inicjalizacji; po prostu zwracaself
.
Przypuszczam byłoby nieszkodliwe nie zadzwonić [super init]
, ale nie ma powodu, aby nie podążać konwencje i, wiesz, nazywają go w swojej podklasy tak. Na przykład Twoja podklasa może w przyszłości dziedziczyć po innej klasie, która może zawierać logikę inicjalizacji w swojej własnej metodzie -init
, którą będzie wymagać twoja podklasa.
Po prostu zadzwoń przez jeden z inicjatorów oznaczonych super
w swojej implementacji, ponieważ powinieneś zrobić to, co jest jasne i poprawne.
- 1. initWithCoder: niewidoczny w NSObject?
- 2. Jak wywołać metodę super?
- 3. Super init vs. rodzic .__ init__
- 4. Czy należy wywołać funkcję [super loadView] z loadView, czy nie?
- 5. metoda musi wywołać super() błąd w Netbeans
- 6. Czy powinienem używać tutaj awakeFromNib lub initWithCoder?
- 7. util.inherits - jak wywołać metodę super na instancji?
- 8. Czy konieczne jest wywoływanie [super encodeWithCoder] podczas podklasy obiektu, który implementuje NSCoding?
- 9. Wywołanie super metody z poziomu super klasy
- 10. Czy można wywołać super ustawianie w odziedziczonych klasach ES6?
- 11. Maksymalny błąd głębokości rekursji w Pythonie podczas wywoływania super-init.
- 12. Czy warto używać super() w Pythonie?
- 13. Czy super klasa nie wywołuje metody nadpisanej?
- 14. Zadzwoń Super metoda klasy automatycznie
- 15. Jaka jest różnica między `super (...)` a `return super (...)`?
- 16. Java: Jak wywołać metodę klasy super-od wewnętrznej
- 17. Należy użyć statycznego inicjatora lub super klasy
- 18. C++ odpowiednik "super"?
- 19. interakcja super() i @staticmethod
- 20. połączeń Super Konstruktor
- 21. Czy muszę wywołać Graphics.Dispose()?
- 22. SonarLint jest super wolny
- 23. Instance zmienna użyta podczas gdy 'ja' nie jest ustawiony na skutek '[(Super lub siebie) Init ...]'
- 24. java.lang.VerifyError: (klasa: ea/Individual, metoda: <init> podpis: (I) V) Konstruktor musi wywołać super() lub ten()
- 25. Kiedy należy dzwonić super?
- 26. VBA spadku analog super
- 27. Mapowanie Cassandra Super Kolumny
- 28. `[super viewDidLoad]` konwencja
- 29. Klasa abstrakcyjna - Super Konstruktor (Java)
- 30. Czy super-SCARY iteratory są legalne?