Private interface vs. private Methode - Ziel c
Was ist der Unterschied zwischen einer privaten Methode und ein eigenes interface?
Zum Beispiel, ich weiß, dass, wenn Sie eine Methode definieren, in der eine Implementierung und das interface tut es nicht erwähnen, es ist als eine private Methode. Ich habe auch Dinge gesehen, wie zum Beispiel:
@interface Collector()
@property (readonly) NSMutableDictionary *count;
@end
Innerhalb der .m Implementierung Datei.
InformationsquelleAutor der Frage joshim5 | 2010-10-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
@interface Foo()
erstellt eine Klasse Erweiterung (ich stehe korrigiert, Requisiten zu bbum) auf interface Foo, das ist wie zusätzliche Methoden, um die Schnittstelle Hinzugefügt. Einige Leute verwenden auch@interafce Foo(Private)
(Kategorie), anstatt eine Klasse Erweiterung mit()
. Es ist mehr wie "Injektion" neue Methoden in einer Klasse außerhalb der Klasse.Platzieren diese in der .m-Datei einfach immer andere Dinge, die vom "sehen" in der .h-Datei, aber das ist es. Grundsätzlich Leute, die normalerweise mit Kategorien oder Klasse Erweiterungen .m-Dateien, um anzugeben, für private Schnittstellen, aber auch für Dinge wie UIKit verwendet Kategorien, um hinzuzufügen
row
undsection
öffentliche Methoden zu NSIndexPath. (Dies kann verwirrend sein.)Die Sie nicht wirklich brauchen, um zu definieren, privaten Methoden auf diese Weise, aber wenn Sie haben eine Methode namens "bar", ruft die Methode foo bevor foo ist definiert in der source-Datei erhalten Sie eine compiler-Warnung, so etwas wie "Objekt selbst kann nicht Antworten foo". Sie können loszuwerden, die durch die Definition von foo, bevor Sie definieren, bar oder anderen foo-aufrufenden code. Es ist das gleiche mit plain C und Funktionen.
Wie Ole sagt, das hört nicht jeder Aufruf von privaten Methoden nur deklariert Ihre Absicht, dass Sie privat und veranlasst den compiler zu generieren "kann nicht Antworten" Warnungen, auch wenn Sie importieren Sie die .h-Datei.
BEARBEITEN
Siehe auch http://www.friday.com/bbum/2009/09/11/class-extensions-explained/ für eine Erklärung der Kategorien vs. Klasse Erweiterungen. Sieht Klasse extensions sollten mehr richtige für die Definition von privaten Methoden, aus einer compiler-Warnung Perspektive, weil Kategorie-Methoden sind optional. Wünschte, mein Buch hätte das erklärt!
InformationsquelleAutor der Antwort Nimrod
Objective-C hat keine vollkommen private Methoden. Die Methode deklariert, in ein eigenes interface-Abschnitt in der .m-Datei ist unsichtbarum dem Anrufer, aber es ist nicht privat. Wenn jemand weiß, dass die Signatur der Methode und ignoriert der compiler die Warnung, Sie können es nennen, von außen, ohne Probleme.
InformationsquelleAutor der Antwort Ole Begemann