你要去看这个类的init方法中,做了些什么事情。你再试试不加init,就明白什么差别了。

解决方案 »

  1.   

    当你创建一个简单的类(没有成员变量)时,你可以不要init函数。但当类变得复杂,需要从创建类对象的地方传入
    初始化参数时,init函数就变得不可缺少。此时是用init开头的变体(也可以认为是重载)函数来初始化。与变体函数相对应的是init默认初始化函数。
      

  2.   


    去哪看 init 的方法? jump to definition 只能看到头文件声明部分,没法看到怎么实现的
      

  3.   

    首先你需要明白的是init函数为NSObject的指定初始化器。(只要是对象的创建都会调用这个方法,这是没有什么可讨论的)
    ios中所有的对象大都直接或间接继承自NSObject. Objective-C 中创建对象分为 alloc 和 init 两步,alloc 是在堆(heap)上初始化内存给对象变量,把变量(指针)设为 nil。每个类可以有很多 init 方法,且每个方法都以 init 开头,但每个类只有一个特定(designated)的 init 方法,NSObject 是 init;,UIView 是 - (id)initWithFrame:(CGRect)aRect;。在子类的 designated 方法中一定要调用父类的 designated 方法,子类其他的 init 方法只能调用子类自己的 designated 方法,不能调用父类的(即使用 self 而不是 super)。