gpt4 book ai didi

objective-c - 一个 Objective-C 类必须只有一个指定的初始化程序吗?

转载 作者:搜寻专家 更新时间:2023-10-30 20:00:24 25 4
gpt4 key购买 nike

我在这个 Apple's docs 中找到了指定初始化器的一些信息,但我不明白的是,每个类都必须有一个且只有一个指定的初始化程序吗?

例如,如果 class AinitL, initM, initN,而 class B 继承自 class A 并且有 initX, initY, initZ。有没有一条规则说我们不能让 initX 调用 [super initL],而 initY 调用 [super initM],并且 initZ 调用 [super initN]?

也就是说,不是所有的“二级初始化器”都调用指定的初始化器,然后每个指定的初始化器都会调用[super initFoo],其中initFoo是父类(super class)的指定初始化器,我们不能只有 3 个主初始化器,并且每个调用者都调用其对应的父类(super class)的 3 个主初始化器吗? (也就是说,这些都继承自 NSObject 并且只是调用 self = [super init]。)

最佳答案

不可以,一个 obj-c 类可以有多个指定的初始化器。最常见的示例是 -initWithCoder:-init。前者在解档对象时使用,后者用于所有其他初始化。

也就是说,在 -initWithCoder: 之外只有一个指定的初始化程序通常是一种很好的做法。这有助于防止代码重复,并且如果要为所有初始化调用子类,则子类必须重写哪个方法是显而易见的。但是,如果您有一个很好的案例需要 3 个不同的指定初始化程序,那么没有什么可以阻止您这样做。请务必正确记录。

关于objective-c - 一个 Objective-C 类必须只有一个指定的初始化程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15033050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com