在iOS上,为什么ViewController中的init没有';不行?

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

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

将在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方法。