Da ich beim Bearbeiten von Legacy-Code gerade auf dieses Problem stoße, möchte ich zusätzliche Notizen zu den vorhandenen Antworten machen, die man beachten muss.
Selbst mit einer neueren Compilerversion macht es manchmal einen Unterschied, ob Sie weglassen @synthesize propertyName
oder nicht .
In dem Fall, dass Sie eine Instanzvariable ohne Unterstrich deklarieren, während Sie sie noch synthetisieren, wie z.
Header:
@interface SomeClass : NSObject {
int someInt;
}
@property int someInt;
@end
Implementierung:
@implementation SomeClass
@synthesize someInt;
@end
self.someInt
greift auf dieselbe Variable zu wie someInt
. Die Verwendung eines führenden Unterstrichs für Ivars folgt nicht den Namenskonventionen, aber ich bin gerade in eine Situation geraten, in der ich solchen Code lesen und ändern musste.
Aber wenn Sie jetzt denken "Hey, @synthesize ist nicht mehr wichtig, da wir einen neueren Compiler verwenden" , liegen Sie falsch! Ihre Klasse führt dann zu zwei Ivaren , nämlich someInt
einer automatisch generierten_someInt
Variablen. So self.someInt
und someInt
die gleichen Variablen nicht mehr ansprechen. Wenn Sie ein solches Verhalten wie ich nicht erwarten, kann dies zu Kopfschmerzen führen.