Unter der Haube sind Objective-C-Objekte grundsätzlich C-Strukturen. Jede enthält ein Feld mit dem Namen isa
, das ein Zeiger auf die Klasse ist, in der das Objekt eine Instanz ist (so weiß die Objekt- und Objective-C-Laufzeit, um was für ein Objekt es sich handelt).
Im Hinblick auf die Initialisierung der Variablen: in Objective-C sind Instanzvariablen 0
(für C Typen wie int
) automatisch initialisiert oder nil
(für Objective-C Objekte). Apples Richtlinien besagen, dass die Initialisierung Ihrer Ivars auf diese Werte in Ihren init
Methoden redundant ist, also tun Sie es nicht. Zum Beispiel, sagen Sie eine Klasse wie folgt hatte:
@interface MyClass : NSObject
{
int myInt;
double myDouble;
MyOtherClass *myObj;
}
@end
Ihre init
Methode, um diese Art und Weise Schreiben überflüssig wäre, da werden diese ivars zu 0
oder nil
ohnehin initialisiert werden:
@implementation MyClass
- (id)init
{
if ((self = [super init])) {
myInt = 0;
myDouble = 0.0;
myObj = nil;
}
return self;
}
@end
Sie tun können Sie stattdessen:
@implementation MyClass
- (id)init
{
return [super init];
}
@end
natürlich, wenn Sie die ivars wollen andere Werte als 0
initialisiert werden oder nil
, sollten Sie sie noch initialisieren:
@implementation MyClass
- (id)init
{
if ((self = [super init])) {
myInit = 10;
myDouble = 100.0;
myObj = [[MyOtherClass alloc] init];
}
return self;
}
@end
Danke für die Antwort, die ich über diese Linie wissen möchte. Variablen in der init-Methode nicht auf 0 oder nil initialisieren; es ist überflüssig. Wo sollen wir dieses Muster verwenden? Bedeutet das, dass wir keine Variablen in Daten initialisieren sollten Modal's –
Fühlen Sie sich frei, Ihre Daten zu initialisieren - initialisieren Sie Ihre Variablen einfach nicht auf '0' oder' nil'. – sarnold
Sarnold erklärte es im Grunde, aber ich aktualisierte meine Antwort, um dieses Problem anzugehen. – mipadi