美文网首页
初始化方法

初始化方法

作者: 太逸 | 来源:发表于2016-04-18 16:40 被阅读0次

初始化方法永远遵循以下两个原则:
1.初始化路径必须保证对象完全初始化,这可以通过调用本类型的 designated 初始化方法来得到保证;
2.子类的 designated 初始化方法必须调用父类的 designated 方法,以保证父类也完成初始化。

对于某些我们希望子类中一定实现的 designated 初始化方法,我们可以通过添加 required 关键字进行限制,强制子类对这个方法重写实现。这样做的最大的好处是可以保证依赖于某个 designated 初始化方法的 convenience一直可以被使用。一个现成的例子就是上面的 init(bigNum: Bool):如果我们希望这个初始化方法对于子类一定可用,那么应当将 init(num: Int)声明为必须,这样我们在子类中调用 init(bigNum: Bool) 时就始终能够找到一条完全初始化的路径了:

  class ClassA {
            let numA: Int
            required init(num: Int) {
                numA = num
            }
            
            convenience init(bigNum: Bool) {
                self.init(num: bigNum ? 10000 : 1)
            }
        }
        
        class ClassB: ClassA {
            let numB: Int
            
            required init(num: Int) {
                numB = num + 1
                super.init(num: num)
            }
        }

不仅仅是对 designated 初始化方法,对于 convenience 的初始化方法,我们也可以加上 required以确保子类对其进行实现。这在要求子类不直接使用父类中的 convenience 初始化方法时会非常有帮助。

相关文章

  • iOS 中的初始化方法链条

    iOS 初始化方法链条 设计原则:1.根据根本特性设计指定初始化方法2.所有初始化方法根据指定初始化方法初始化 代...

  • 字符串初始化方式比较

    初始化方法一: 用new String初始化的存储方式: 初始化方法2: 用"="初始化的存储方式: 此方法初始化...

  • swift 之DESIGNATED,CONVENIENCE

    在swift中有两种初始化方法, 1.指定初始化方法 指定初始化方法其实指的就是 init 方法 2.便利初始化方...

  • 基本初始化方法

    一、UIView的专属初始化方法 : (1)纯代码的初始化方法: (2)Xib/Storyboard的初始化方法:...

  • IOS NSTimer 定时器

    NSTimer 的初始化 初始化方法:有五种初始化方法 (NSTimer *)timerWithTimeInter...

  • 看书笔记16-20

    十六:提供全能初始化方法 在类中提供一个全能初始化方法,并于文档里指明。其他初始化方法均应调用此方法若全能初始化方...

  • 便捷初始化器和指定初始化器

    1、自定义初始化方法要先调用自己类默认初始化方法,自己重写默认初始化方法要先调用父类默认初始化方法2、应该要先调用...

  • 9 swift开发中的init()和deinit()

    init() 类初始化对象时所调用的方法 初始化方法的分类: deinit():反初始化方法 1、定义:可以这么理...

  • ArrayList源码学习

    容器初始化方法: 两种初始化方法 不指定初始容器大小 内部源码操作 指定初始化容器大小 添加方法 有4种添加方法:...

  • 提供“全能初始化方法”--Effective笔记

    1,在类中提供一个全能初始化方法,并于文档指明。其他初始化方法均应调用此方法。 2,若全能初始化方法与超类不同,则...

网友评论

      本文标题:初始化方法

      本文链接:https://www.haomeiwen.com/subject/jhjalttx.html