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

将在您的 UIViewController 上调用各种 -init 方法之一,具体取决于它是来自 .xib、情节提要还是在代码中的其他位置手动分配。

放置这种初始化的更好的地方是-viewDidLoad,像这样

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

在您的 init 方法中放置一个 NSLog 或调试断点,我怀疑您会发现它没有被调用。如果您查看 UIViewController,您会看到其他初始化方法(例如,如果您使用的是 NIB,它会调用initWithNibName:bundle:)。如果是通过故事板,它可能会有所不同。请参阅 Apple 的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 回答