分単位でiOSの開発がどのように進んでいるかを知り始めています。現在、私が働いているApressの最初のIOS6の本を持っています。iOS - iOSチュートリアルを開始 - 変数の前に下線を引く?
第2章では、2つのボタンとラベルを表示する簡単なチュートリアルがあり、ボタンを押すと、そのボタンが押されたラベルに表示されます。
私はチュートリアルを完了しましたが、答えが見つからないという質問が1つありました。
チュートリアルでは、違いがある場合にARC(自動参照カウント)を使用します。
#import <UIKit/UIKit.h>
@interface MTMViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *statusLabel;
- (IBAction)buttonPressed:(UIButton *)sender;
@end
とMファイル:
#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
以上行っているとき、それはしかし、本の中でどのように表示されるかである。ここ
コードは、ヘッダファイルには、
ですXcodeのチュートリアル次の行でコンパイルできませんでした。
statusLabel.text = plainText;
私がコンパイルされ、このコードを実行され、細かい走ったとき、私は何でもを逃したかどうかを確認するためにチュートリアルをさかのぼることで、これがなぜ起こったかを把握しようとした
_statusLabel.text = plainText;
:
、代わりにそれを変更しなければなりませんでした私は何も見ませんでした。
誰も、なぜ本のコードがコンパイルされなかったのか、なぜ変数の先頭にアンダースコアを追加しなければならなかったのか説明できますか?これは正しいですか、私は何か間違ったことをしましたか?
ゲッターとセッターを生成するための "@synthesize"の概念があります。 "@synthesize"でそのプロパティを宣言すると、同じ名前で直接アクセスすることができます。ちょうど参照のために。 –
@Jennis私は本当にそれをお勧めしません。それは、基礎となる変数にアクセスしているのか、生成されたgetter/setterを使用しているのかを混乱させます。さまざまなアクセス方法に異なる名前を付けることで、コードが何をしているのか、その根拠が明確になります。 '@ synthesisize'がプロパティに対して必須である旧バージョンのXcodeを使用している場合、' @synthesize statusLabel = _statusLabel'の形式をお勧めします。 – WDUK