在iOS上,为什么ViewController中的init没有';不行?
在ViewController的界面中,我有在iOS上,为什么ViewController中的init没有';不行?,ios,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 {
@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?将在UIViewController上调用各种-init方法之一,这取决于它是来自.xib、脚本还是在代码的其他地方手动分配
放置这种初始化的更好位置是-viewDidLoad,类似这样
- (void)viewDidLoad {
[super viewDidLoad];
self.count = 100;
}
在init方法中放置一个NSLog或调试断点,我怀疑您会发现它没有被调用。如果您查看UIViewController,您将看到其他初始化方法(例如,如果您使用的是NIB,它将调用)。如果是通过故事板,它可能会有所不同。请参阅苹果公司手册中有关初始化的讨论 常规视图控制器配置的更好位置是
viewDidLoad
将其更改为:
- (id)initWithCoder:(NSCoder *)aDecoder{
self = [super initWithCoder:aDecoder];
if (self) {
self.count = 100;
}
return self;
}
该视图实际上是由XIB创建的,它正在对其进行“解码”或取消绑定。当这种情况发生时,XIB调用
initWithCoder:
视图控制器是如何创建的?它是一个标准的单视图应用程序,所以这不是一种模式,我们将所有的init代码都放在自己的init
方法中,嗯?我经常发现使用-viewDidLoad更干净,因为这样您就不必担心ViewController是如何初始化的。否则,您必须覆盖-initWithCoder,-initWithNibName:bundle,只需简单地覆盖-init(可能是其他),您就可以再次检查。。。我尝试将其设置为10000,并删除了viewDidLoad中的一个,但没有将其设置为10000您确定initWithNibName
?我添加了该方法,但它没有初始化计数。。。但是我没有为这个方法定义任何参数,我的观点是有一大堆init方法。除非您自己调用它(例如,此视图控制器是您的其他视图之一初始化、分配和打开的控制器),否则最好不要尝试猜测正在使用哪个视图控制器。您是否在viewDidLoad
中进行了各种初始化,而不是任何特定的init方法。