在iOS上,为什么ViewController中的init不起作用?

时间:2012-04-21 03:57:35

标签: ios

在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?

3 个答案:

答案 0 :(得分:2)

将在您的UIViewController上调用其中一种-init方法,具体取决于它是从.xib,故事板还是在代码中的其他位置手动分配。

进行这种初始化的更好的地方是在-viewDidLoad中,类似这样的

- (void)viewDidLoad {
    [super viewDidLoad];
    self.count = 100;
}

答案 1 :(得分:1)

在init方法中放置一个NSLog或调试断点,我怀疑你会发现它没有被调用。如果查看UIViewController,您将看到其他初始化方法(例如,如果您使用的是NIB,则会调用initWithNibName:bundle:)。如果它是通过故事板,它可以有所不同。请参阅Apple的View Controller Programming Guide for iOS中的初始化讨论。

通用视图控制器配置的更好位置是viewDidLoad

答案 2 :(得分:0)

将其更改为:

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

视图实际上是由XIB创建的,它正在“解码”或取消装箱。发生这种情况时,XIB会调用initWithCoder: