在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?
答案 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: