Es gibt zwei Laufzeiten für Cocoa/Objective-C: die Legacy-Laufzeit und die "moderne" Laufzeit (so nennt Apple es).iPhone Simulator: Build Fehler bei der Verwendung synthetisierter Instanz Variablen
Gemäß Apple's documentation "iPhone-Anwendungen und 64-Bit-Programme auf Mac OS X 10.5 und höher verwenden Sie die moderne Version der Laufzeit".
So weit so gut.
Jetzt unterstützt die "moderne" Laufzeit eine Funktion namens "synthetisierte Instanzvariablen", was bedeutet, dass Sie für jede deklarierte Eigenschaft keine Instanzvariable definieren müssen. Die Instanzvariable wird automatisch hinzugefügt. Zitat aus den iPhone Reference Library: „. Für die modernen Runtimes werden Instanzvariablen synthetisiert nach Bedarf Wenn eine Instanzvariable mit dem gleichen Namen bereits vorhanden ist, es verwendet wird“
Wenn Sie diese Funktion in Ihrem iPhone App verwenden, Es baut und läuft gut auf dem iPhone (physischen) Gerät, aber wenn Sie das Ziel auf "iPhone Simulator" ändern, erhalten Sie Build-Fehler:
synthetisierte Eigenschaft 'x' muss entweder die gleiche wie eine kompatible ivar benannt werden oder muss explizit einen ivar benennen
Was ist hier los? Ist der iPhone Simulator kein echter iPhone Simulator? Bedeutet dies, dass der Simulator eine andere Laufzeit als das physische iPhone verwendet?
Wie kann ich diese Funktion auf dem iPhone-Simulator verwenden?
EDIT:
Der Code, der nicht kompiliert, wenn das iPhone Simulator Targeting:
@interface MyClass : NSObject {
}
@property NSString *prop1;
@end
Gemäß der Dokumentation, sollte dies gut funktionieren auf der "modernen" Laufzeit und zwar auf dem iPhone-Gerät, aber es kompiliert nicht, wenn das Ziel auf iPhone Simulator geändert wird.
Das ist richtig - es ist ein Fehler in dem aktuellen Simulator. Es gab ein SO-Thema dazu (das ich nicht finden kann - vielleicht war es ein Kakao-Dev-Thread), und auch das: http://iphonedevelopment.blogspot.com/2009/06/runtime-madness.html –
@ Daniel: Dieser Kommentar ist es wert, als Antwort zurückgegeben zu werden –
Ich glaube, das wurde in der 4.0 oder 4.1 SDK behoben. –