Ich habe bereits auf @synthesize
gelesen und einige wirklich gute Informationen zu dieser Frage gefunden: What exactly does @synthesize do? und ich verstehe den Unterschied zwischen einer Instanzvariablen und einer Eigenschaft, aber in dem Code, den ich geerbt habe, geht mein Problem ein wenig weiter als das und ich möchte wissen, was es tut (oder wenn es notwendig ist) unter den folgenden Umständen. Wenn mehr Code-Kontext benötigt wird, fragen Sie einfach.Was wird @synthesize tun, wenn "get" implementiert wird?
// example.h
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
// example.m
@synthesize managedObjectContext = _managedObjectContext;
//... later on in example.m
- (NSManagedObjectContext *)managedObjectContext {
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
_managedObjectContext = [[NSManagedObjectContext alloc] init];
return _managedObjectContext;
}
im Beispiel also aus der verknüpften Antwort MapView
und MapView1
sowohl während in der .h
-Datei definiert wurden in meinem Beispiel ein Zeiger auf _managedObjectContext
ist nie so weit definiert, wie ich nachdem ich eine globale Suche berichten. Wir verwenden es mit dem Schlüsselwort @synthesize
sowie eine konkrete Definition von managedObjectContext
in der Implementierungsdatei.
So ist meine Frage 2 wirklich:
- Ist
@synthesize
noch etwas hier? - Warum kompiliert es immer noch, wenn
_managedObjectContext
nicht wie in der anderen Beispielfrage definiert ist?
Also, wenn ich eine Eigenschaft 'ManagedObjectContext' deklariere, erstellt der Compiler automatisch ein Ivar namens '_managedObjectContext'? In meinem Beispiel könnte ich einfach die 'managedObjectContext'-Implementierung als 'return [[NSManagedObjectContext alloc] init];} schreiben und der Compiler kümmert sich um den Rest? Gibt es irgendwelche Arten von Speicherlecks, über die ich mir Sorgen machen sollte? – akousmata
@akousmata Nun, nicht ganz so wie Ihr Getter ist etwas Besonderes. Ich denke, du solltest es ablegen und dieses Objekt stattdessen in der 'init'-Methode zuweisen. Viel konventioneller. – trojanfoe
Ich werde versuchen, das zu untersuchen, ich bin mir nicht sicher, ob ich das kann, ohne einen Haufen anderer Dinge zu brechen. Danke für die Information. Immer noch ziemlich neu bei iOS – akousmata