1

ViewController のインターフェイスでは、

@property int count;

そして実装では、私は持っています

@synthesize count;

-(id) init {
    self = [super init];
    if (self) {
        self.count = 100;
    }
    return self;
}

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"%i", self.count++);
}

なんらかの理由で、最初self.countに印刷されたのは0ですが、100ではありませんか?

4

3 に答える 3

2

さまざまな -init メソッドの 1 つが UIViewController で呼び出されます。これは、それが .xib、ストーリーボードから出てきたか、またはコード内の別の場所に手動で割り当てられたかに応じて異なります。

この種の初期化を配置するのに適した場所は、-viewDidLoad のようなものです。

- (void)viewDidLoad {
    [super viewDidLoad];
    self.count = 100;
}
于 2012-04-21T04:03:16.770 に答える
1

init メソッドに NSLog またはデバッグ ブレークポイントを配置すると、それが呼び出されていないことがわかると思います。UIViewController を見ると、他の初期化メソッドが表示されます (たとえば、NIB を使用している場合は、 が呼び出されますinitWithNibName:bundle:)。ストーリーボード経由の場合は、異なる場合があります。Apple のView Controller Programming Guide for iOSの初期化に関する説明を参照してください。

一般的なビュー コントローラーの構成に適した場所は ですviewDidLoad

于 2012-04-21T04:13:59.310 に答える
0

次のように変更します。

- (id)initWithCoder:(NSCoder *)aDecoder{
    self = [super initWithCoder:aDecoder];
    if (self) {
        self.count = 100;
    }
    return self;
}

ビューは実際には XIB によって作成され、「デコード」またはアンボックス化されます。これが発生すると、XIB が呼び出します。initWithCoder:

于 2012-04-21T05:14:59.483 に答える