1

私は定義します

@property (nonatomic, assign) int currentUserNum;
@property (nonatomic, assign) BOOL isAlive;

@interface MyClass

およびで定義され-initたメソッド@implementation MyClass

@synthesize currentUserNum, isAlive;
-(id) init {
  if (self = [super init])  {
     self.currentUserNum = 0;
     self.isAlive = YES;
  }
  return self;
}

self.currentUserNum = 0;クラッシュしましたが、self.isAlive = YES;動作します!それらは両方ともassign財産です。

理由を知りたいですか?ありがとう!

4

1 に答える 1

5

あなたのinitメソッドには、多くの重要なコードがありません。

- (id)init {
    if ((self = [super init])) {
        _currentUserNum = 0; // it's not wise to reference properties in the init method
    }

    return self;
}

すべてのinitメソッドは、この基本的なパターンに従う必要があります。適切なまたは他selfの を呼び出す値を割り当てます。そうでない場合は、適切な初期化コードを実行し、最後に を返します。super initself initnilself

于 2013-01-09T08:08:37.593 に答える