Ich verstehe, dass Protokolle wie Schnittstellen in anderen Sprachen sind - sie erklären erwartete Methoden - während Kategorien Ihnen erlauben, neue Methoden zu bestehenden Typen hinzuzufügen (vielleicht sogar Typen, die Sie nicht besitzen.)Warum verwendet das iPhone SDK für einige Delegierte Kategorien anstelle von Protokollen?
Warum, dann , verwendet das iPhone SDK manchmal Kategorien zum Deklarieren von Delegattypen? Normalerweise würde ich erwarten, dass alle Delegierten ID <MyDelegateProtocol> eingegeben werden, aber es gibt viele Beispiele, wo dies nicht der Fall ist.
Siehe zum Beispiel NSURLConnection. Sein Delegat ist "ID" und der "Vertrag" wird als eine Kategorie für NSObject (NSURLConnectionDelegate) deklariert.
Also: Was ist die Motivation für die Verwendung von Kategorien in diesen Fällen?
Das war meine Vermutung, aber ich wusste es nicht sicher. Vielen Dank! –
Erwarten Sie, die Änderung zu Protokollen zu sehen, kommen ziemlich bald jedoch. Da nun optionale Protokollmethoden erlaubt sind, wird der Code durch die Verwendung der Protokollmethoden ein wenig aufgeräumt und viele der jetzt unnötigen Kategorien entfernt. (Sie sind cool und alles, aber anstatt Methoden zur Laufzeit auf NSObject anzuheften, denke ich, dass die Implementierung eines Protokolls durch einen Delegierten sowohl konzeptionell als auch aus Laufzeitsicht viel sauberer ist.) –