Frage

Ich habe das bei der Verwendung von iOS6 Beta 3 bemerkt

Wenn ich eine neue Unterklasse eines UIViewContoller erstelle (keine anderen übergeordneten Klassen erzeugen dieses Verhalten, das mir aufgefallen ist), wird das .die m-Datei hat jetzt eine leere Kategorie oben in der Datei.In der Vergangenheit, als ich etwas über Kategorien lernte, bemerkte ich, dass einige Leute dieselbe Technik verwendeten, um private Methoden anzuzeigen (obwohl sie nicht wirklich privat waren).

Ist das die Absicht hier?Hat sich etwas daran geändert, Dinge jetzt wirklich privat zu machen?Ich bemerke auch die @private Direktive da draußen.

Was ist Ihr persönlicher Codierungsstil in Bezug auf private Variablen und Methoden?

UPDATE:Da XCode uns dazu drängt, die Klassenerweiterungen zu verwenden, habe ich sie für private Methoden / ivar für dieses Projekt verwendet.Ich habe jedoch einen Nachteil gefunden.Ich habe gesehen, dass ich einen meiner untergeordneten UIViewController zusammen mit all seinen UIButtons, UILabels usw. wiederverwenden kann....Ich hatte dieses Erbe:UIViewController <- FirstViewController <- Zweiter Ansichtscontroller.

Nun, alle privaten Methoden, die ich in die Klassenerweiterung von FirstViewController eingefügt habe, werden beim automatischen Vervollständigen nicht angezeigt, wenn ich in SecondViewController codiere.Ein leichtes Ärgernis....

War es hilfreich?

Lösung

Sie beziehen sich auf diese Schnittstellendefinition:

@interface MYViewController ()
@end

Dies ist technisch eher eine Klassenerweiterung als eine Kategorie.Kategorien haben eine Zeichenfolge in Klammern.Klassenerweiterungen werden der Klasse zur Kompilierungszeit hinzugefügt und können daher Ivars hinzufügen (normalerweise in Form von Eigenschaften).Kategorien werden zur Laufzeit hinzugefügt und können keine Ivars hinzufügen.

Alles in allem ist Ihr Punkt richtig.Dies wird verwendet, um private Methoden und Eigenschaften zu definieren.

In der ObjC-Welt ist "privat" ein "No Trespassing" -Schild, keine Stacheldrahtwand.Zwar gibt es eine @private schlüsselwort (das die Compiler-Erzwingung hinzufügt), gilt nur für Ivars und ist im Allgemeinen nicht erforderlich.Diese Art der warnbasierten Privatsphäre funktioniert in ObjC sehr gut und ist völlig ausreichend.

Fügen Sie Ihre privaten Eigenschaften in diese Klassenerweiterung ein, und externe Anrufer erhalten Warnungen "Reagiert möglicherweise nicht auf Selektor", wenn sie versuchen, auf sie zuzugreifen (genau wie beim Aufrufen einer undefinierten Methode).Sie sollten niemals zulassen, dass Warnungen in einem ObjC-Projekt vorhanden sind, damit die Datenkapselung erzwungen wird.


BEARBEITEN

Wenn sie privat sind, sollten sie nicht in Ihrer Unterklasse auftauchen.Was Sie wollen, ist geschützt.Es gibt kein großartiges Schema für geschützte Methoden in ObjC, aber eine gängige Technik besteht darin, sie in eine Kategorie in a einzuordnen.h-Datei wie MyViewController + geschützt.h.Ich finde, dass dies in der Praxis sehr selten vorkommt, da so viel von gutem Objektdesign nicht unterklassig ist.Stattdessen werden Komposition und Delegation verwendet.

In Bezug auf "Warum nur Controller anzeigen." Erstens sind es nicht nur View-Controller.Es sind nur View-Controller unter iOS (naja, VC, TableViewController und GLKViewController).Auf dem Mac sind es auch Fenstercontroller und Spotlight-Importer.Schau rein:

.../Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates
.../Library/Xcode/Templates

Aber warum diese?Nun, das sind alles Controller, und es ist wahnsinnig üblich, dass Controller private Eigenschaften benötigen.Wenn Sie keine privaten Eigenschaften in einem Controller haben, machen Sie wahrscheinlich zu viel öffentlich.Das ist für Modell- und Ansichtsklassen nicht so universell.Ich vermute, das hat bei ihrer Entscheidung mitgespielt.Es könnten auch verschiedene Personen gewesen sein, denen die Vorlagen gehörten, oder dass sie zu unterschiedlichen Zeiten aktualisiert wurden.Manchmal sieht man kleine Inkonsistenzen, die sich mit der Zeit glätten.

Sie können auch Ihre eigenen Vorlagen erstellen.Sehen Erstellen benutzerdefinierter Xcode 4-Dateivorlagen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top