11 Stimmen

IBOutlet-Deklarationen?

Ich habe den unten stehenden Code auf 3 verschiedene Arten gesehen (in Bezug auf IBOutlet). Ist das wichtig, ich würde sagen, dass es präziser wäre, IBOutlet sowohl zur Deklaration als auch zur @property hinzuzufügen.

NUR EIGENTUM:

@class SwitchViewController;

@interface iPhone_switcherAppDelegate : NSObject  {
    UIWindow *window;
    SwitchViewController *switchViewController;
}

@property(nonatomic, retain) IBOutlet UIWindow *window;
@property(nonatomic, retain) IBOutlet SwitchViewController *switchViewController;

NUR DEKLARATION:

@class SwitchViewController;

@interface iPhone_switcherAppDelegate : NSObject  {
    IBOutlet UIWindow *window;
    IBOutlet SwitchViewController *switchViewController;
}

@property(nonatomic, retain) UIWindow *window;
@property(nonatomic, retain) SwitchViewController *switchViewController;

BEIDES:

@class SwitchViewController;

@interface iPhone_switcherAppDelegate : NSObject  {
    IBOutlet UIWindow *window;
    IBOutlet SwitchViewController *switchViewController;
}

@property(nonatomic, retain) IBOutlet UIWindow *window;
@property(nonatomic, retain) IBOutlet SwitchViewController *switchViewController;

Prost Gary

11voto

Nikolai Ruhe Punkte 80427

IBOutlet ist nur für InterfaceBuilder relevant. Für den Compiler definiert UINibDeclarations.h #define es als nichts.

InterfaceBuilder interpretiert IBOutlet als Hinweis aus der Header-Datei, um die verfügbaren Outlets für die Klasse aufzulisten. Wenn Sie ein Objekt mit einem IBOutlet verknüpfen, unabhängig davon, ob es als Property oder Instanzvariable definiert ist, wird diese Information in das Nib geschrieben.

Beim Laden des Nibs versucht der Loader, die beste Möglichkeit zu finden, die Verbindung herzustellen: Zunächst versucht er, eine Setter-Methode mit einem geeigneten Namen zu finden. Wenn kein solcher Setter gefunden wird, wird direkt auf die Instanzvariable gesetzt, was schlechter Stil ist, da die Speicherverwaltung auf diese Weise nicht klar ist.

All Ihre vorgeschlagenen Beispiele haben eine Property (und natürlich eine Setter-Methode) mit dem richtigen Namen. In jedem Fall würde der Loader die Setter-Methode verwenden, unabhhängig davon, wo sich das IBOutlet Tag befindet: Es gibt keinen Unterschied zwischen Ihren Beispielen, weder im Nib noch in der Ausführung des Codes.

Der beste Stil wäre es, das IBOutlet Tag in die Property-Definition zu setzen.

7voto

diederikh Punkte 25146

Sollte nicht wichtig sein. Mit dem 10.6 64-Bit SDK können Sie die Eigenschaft auch ohne das ivar schreiben:

@class SwitchViewController;

@interface iPhone_switcherAppDelegate : NSObject  {
}

@property(nonatomic, retain) IBOutlet UIWindow *window;
@property(nonatomic, retain) IBOutlet SwitchViewController *switchViewController;
@end

3voto

kubi Punkte 46128

Der aktuelle Style im Beispielcode von Apple platziert das IBOutlet in der Property-Deklaration. Aus Gründen der Konsistenz ist das wahrscheinlich der beste Ort, um es hinzuzufügen.

0voto

jgray Punkte 5

I also found this way (without any property declaration):

@class SwitchViewController;

@interface iPhone_switcherAppDelegate : NSObject  {
    IBOutlet UIWindow *window;
    IBOutlet SwitchViewController *switchViewController;
}

@end

What about this?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X