Ich fange an zu lernen, wie einige iOS-Entwicklung in der Minute und ich habe derzeit die Apress IOS6 beginnen Buch, dass ich arbeite.iOS - Beginn iOS Tutorial - Unterstrich vor Variable?
In Kapitel zwei gibt es ein einfaches Tutorial, um zwei Tasten und eine Beschriftung zu zeigen. Wenn eine Taste gedrückt wird, wird auf dem Etikett angezeigt, welche Taste gedrückt wurde.
Ich habe das Tutorial abgeschlossen, aber es hat eine Frage aufgeworfen, auf die ich die Antwort nicht finden kann.
Das Lernprogramm verwendet ARC (automatische Referenzzählung) für den Fall, dass es einen Unterschied macht. Hier
ist der Code,
Die Header-Datei:
#import <UIKit/UIKit.h>
@interface MTMViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *statusLabel;
- (IBAction)buttonPressed:(UIButton *)sender;
@end
Und die m-Datei:
#import "MTMViewController.h"
@implementation MTMViewController
- (IBAction)buttonPressed:(UIButton *)sender {
NSString *title = [sender titleForState:UIControlStateNormal];
NSString *plainText = [NSString stringWithFormat:@"%@ button pressed.", title];
statusLabel.text = plainText;
}
@end
Die oben ist, wie es in dem Buch erscheint, aber wenn das zu tun Tutorial in Xcode konnte ich nicht mit der folgenden Zeile kompilieren:
statusLabel.text = plainText;
Und stattdessen musste es ändern:
_statusLabel.text = plainText;
Wenn ich diese den kompilierten Code gemacht und lief gut, ich versuchte herauszufinden, warum dies geschah durch das Tutorial geht zurück, um zu sehen, ob ich etwas verpasst, aber Ich habe nichts gesehen.
Kann mir jemand erklären, warum der Code im Buch nicht kompiliert wurde und warum ich den Unterstrich vor die Variable setzen musste? Ist das korrekt oder habe ich etwas falsch gemacht?
Es gibt ein Konzept von "@ synthesize" zum Generieren von Getter und Setter. Wenn Sie diese Eigenschaft mit "@synthesize" deklarieren, können Sie direkt mit demselben Namen darauf zugreifen. Nur als Referenz. –
@Jennis Ich würde das wirklich nicht empfehlen, da dies zu Verwirrung darüber führen wird, ob Sie auf die zugrunde liegende Variable oder über den generierten Getter/Setter zugreifen. Verschiedene Namen für verschiedene Zugriffsmöglichkeiten machen deutlich, was der Code tut und wie er begründet wird. Wenn Sie ältere Versionen von Xcode verwenden, bei denen '@ synthesize' für Eigenschaften obligatorisch ist, würde ich das Formular '@synthesize statusLabel = _statusLabel 'empfehlen. – WDUK