2013-08-29 5 views
8

Ich habe eine Klassenstruktur des Typs UIViewControllerSubclass : UIViewController, wobei die einzige Funktion von UIViewControllerSubclass zu #import UIViewController+Category.h ist. Der Grund, warum ich Methoden in einer Kategorie hinzugefügt habe, ist, dass ich auch UITableViewControllerSubclass : UITableViewController machen kann, was auch #import UIViewController+Category.h ist. Wie wir alle wissen, wiederhole dich nicht.Ist es sicher, eine in Category definierte Methode in Objective-C zu überschreiben?

Nehmen wir nun an, dass UIViewController + Category.h die Struktur:

@interface UIViewController(Category) 
- (void) method1; 
- (void) method2; 
@end 

Wie sicher ist es UIViewControllerSubclassSubclass : UIViewControllerSubclass, zu schaffen, die method1 außer Kraft gesetzt wird? Ich nehme an, das wird funktionieren, weil Objective-C die Nachricht weitergibt, aber aus irgendeinem Grund sagt mir meine Intuition, dass ich es falsch mache.

+1

Sie müssen daran denken, dass Objective-C "Ente typed" ist. Wenn eine Klasse eine Methode unterstützt, können Sie sie (sicher) aufrufen, auch wenn die Methode nicht in der .h-Datei der Klasse definiert ist. (Wie Sie an den Compiler-Prüfungen vorbeischleichen, bleibt Ihnen überlassen.) –

Antwort

7

Alles sollte gut funktionieren, da die Kategorie auf UIViewController angewendet wird, so dass alle Instanzen von UIViewController, einschließlich Unterklassen, Zugriff auf die Methoden haben. Es ist nichts unsicheres daran; So sollen Kategorien angewendet werden.

+1

Ich nehme an, es fühlt sich einfach "unsicher" an, weil die Kategoriemethode nicht so eng an die Klasse gekoppelt ist wie eine Instanzmethode. – paulrehkugler

Verwandte Themen