关于init初始化方法

最近看了些书, 发现其中一些都对init的设计方法做了些说明, 这里总结下:

当然, 和NSCoding协议相关的对象要另外考虑.

init方法应当遵循的规则:

  • 如果某个类有多个初始化方法,那么应该由其中的一个方法来完成实际的任务,该方法称为指定初始化方法. 其他的初始化方法都应该(直接地或间接地)调用指定初始化方法.
  • 指定初始化方法应该先调用父类的指定初始化方法,然后再对实例变量进行初始化.
  • 如果某个类的指定初始化方法和父类的不同(这里指的是方法名不同),就必须覆盖父类的指定初始化方法,并调用新的指定初始化方法.
  • 如果某个类有多个初始化方法, 就应该在相应的头文件中明确的注明, 哪个方法是指定初始化方法.

如果当子类需要重新定义他的指定初始化方法时(名称和父类的指定初始化不同), 需要遵循以下三个步骤:

  1. 定义自己的指定初始化方法, 确保调用了直接父类的指定初始化方法.
  2. 重载直接父类的指定初始化方法, 并且在此方法中调用你的新的指定初始化方法.
  3. 为新的指定初始化方法写注释.

不应当从指定初始化方法中调用一个次级的初始化方法 .

那么简单的说下这么做的好处吧:
简单有效的规范了初始化方法
比如说吧, 当你不小心调用了一个子类并没有覆写的初始化方法, 如果你的类继承体系是基于以上原则的, 那么按照规则, 子类最终还是会调用子类自己的指定初始化方法的.

就好像水闸, 闸立在这里, 水流就会受到我的控制,没有别的出口, 相应的,指定初始化方法的这种模式也能有效的管理初始化方法

posted @ 2015-11-03 23:00  iShao  阅读(1478)  评论(0编辑  收藏  举报