init mit dem delegate-Protokoll
Immer wenn ich eine init, die ein Delegat, gemäß einem Protokoll Schreibe ich die init als diese:
- (id)initWithDelegate:(id<ProtocolToConform>)delegate;
Diese Weise habe ich eine Warnung, wenn die erstellen-Objekt entspricht nicht dem Protokoll.
Jedoch bemerkte ich, dass der ie UIAlertView
init-Methode sieht wie folgt aus:
- (id)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ...
Den Delegierten argument nicht angeben, entsprechen die UIAlertViewDelegate
Protokoll? Irgendwelche Hinweise, warum hat Apple es geschafft das Weg?
- Ich dachte, Sie waren nur zu faul, um hinzuzufügen, oder es könnte sein, weil alle das UIAlertViewDelegate-Methoden sind optional, es spielt keine Rolle, wenn der Delegat entsprechen, das Protokoll oder nicht.
- würde es nicht geben, keine Vorteil in diesem Fall wäre es nur eine zusätzliche Schmerz-konformes Protokoll zu Ihren Klassen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mein Verständnis ist, dass die API war ein großes Durcheinander, vor ein paar Jahren und Sie sind immer noch die Befestigung all diese Fragen.
Beachten Sie, dass bis vor kurzem viele Protokolle wurden informelle und fast überall in der API, die Sie finden konnten die Delegierten nur als
id
. Apple repariert es Schritt für Schritt in jeder version, zum Beispiel formaleNSURLConnection
Delegierten kam mit iOS 6.0. Oder beachten Sie, dass in iOS 6.1 einige derid
Gegenzug Arten wurden geändert ininstancetype
.Gut, das war meine ursprüngliche Idee, nach der überprüfung der header-Dateien:
Es ist offensichtlich, jemand wollte noch hinzufügen das Protokoll der Erklärungen, sondern nur den Kommentar. Ich vermute, dass Sie es verlassen, ohne das Protokoll für die Kompatibilität.
Gute Frage! Ich mache das gleiche, in der Hoffnung, mehr Fehler zur compile-Zeit.
Apple erscheinen werden, gemäß Ihren eigenen Normen; wie bereits in Konzepte in Objective-C:
@property(nonatomic,assign) id <UITableViewDelegate> delegate;
so scheinen Sie es mischen 🙂