@interface Foo()
erstellt eine Klassenerweiterung (ich stehe korrigiert, Requisiten zu Bbum) auf der Schnittstelle Foo, die wie zusätzliche Methoden der Schnittstelle hinzugefügt wird. Einige Leute verwenden auch @interafce Foo(Private)
(Kategorie) anstelle einer Klassenerweiterung mit ()
. Es ist eher so, als würden neue Methoden außerhalb einer Klasse in eine Klasse "injiziert".
Wenn Sie dies in die .m-Datei einfügen, werden andere Dinge nicht in der .h-Datei angezeigt, aber das war's. Grundsätzlich verwenden Personen normalerweise Kategorien oder Klassenerweiterungen in .m-Dateien, um private Schnittstellen anzugeben, aber sie werden auch für Dinge wie UIKit verwendet, die Kategorien verwenden, um row
und section
öffentliche Methoden zu NSIndexPath hinzuzufügen. (Dies kann verwirrend sein.) Sie müssen nicht wirklich private Methoden auf diese Weise definieren, aber wenn Sie eine Methode namens bar haben, die die Methode foo aufruft, bevor foo in der Quelldatei definiert ist, erhalten Sie einen Compiler Warnung etwas wie "Objekt selbst kann nicht auf foo reagieren". Sie können das entfernen, indem Sie foo definieren, bevor Sie Bar oder einen anderen foo-calling-Code definieren. Das Gleiche gilt für normale C und Funktionen. Wie Ole sagt, dass dies niemanden daran hindert, die privaten Methoden aufzurufen, erklärt es nur Ihre Absicht, dass sie privat sind und bewirkt, dass der Compiler die "Kann nicht auf" Warnungen generiert, selbst wenn sie die .h-Datei importieren .
EDIT
Siehe auch http://www.friday.com/bbum/2009/09/11/class-extensions-explained/ für eine Erklärung der Kategorien vs. Klassenerweiterungen. Klassenerweiterungen sollten für die Definition privater Methoden aus Sicht des Compilerwarns korrekter sein, da Kategoriemethoden optional sind. Wünschte, mein Buch hätte das erklärt!
Es gibt einen großen Unterschied zwischen benannten Kategorien '(foo)' und einer Klassenerweiterung '()'. – bbum
Haben Sie einen Hinweis darauf? Ich sehe in dem Buch "Programmieren in Objective-C 2.0" nichts darüber. Es scheint, als wäre der Kategoriename nur optional von allem, was ich sagen kann. Nicht, dass ich ein großer Experte wäre oder irgendetwas anderes, aber es wäre hilfreich, wenn Sie einen Link bereitstellen könnten, der den Unterschied zwischen (Privat) und() erklärt. – Nimrod
vergesst, ich scheine deinen Blog gefunden zu haben http://www.friday.com/bbum/2009/09/11/class-extensions-explained/ Ich frage mich, warum mein Buch nicht darüber spricht? – Nimrod