在目标c中,我应该覆盖init方法来初始化我的变量吗?如果变量是属性,我仍然可以通常的方式来设置它们的初始值吗?
答案 0 :(得分:3)
在目标c中,我应该覆盖init方法来初始化我的变量吗?
是。具体而言,指定的初始化程序。
您的子类还可以指定另一个构造阶段(例如viewDidLoad)。此外,对象的内存在分配时归零,因此您不需要将它们显式设置为0 / nil(除非您发现它更具可读性)。
如果变量是属性,我仍然可以通常的方式设置它们的初始值吗?
您应该避免使用对象的实例方法/访问器,并直接在部分构造的状态(特别是初始化程序和dealloc)中访问ivars。您需要避免许多副作用 - Example Here;
答案 1 :(得分:1)
您可以在视图控制器的viewDidLoad方法中初始化变量。
答案 2 :(得分:1)
在类接口中声明的变量将自动初始化为默认值,0表示整数值,nil / NULL表示类和指针。如果需要将变量初始化为其他值,则需要覆盖类的保证入口点。例如,从NSObject
继承的自定义类只会覆盖init
。如果您正在使用从NIB
文件加载的视图控制器,则可以覆盖initWithCoder:
或– awakeFromNib
。您应该始终检查文档中是否继承了哪个类,并找到该类的指定初始化程序。有时您需要设置一个通用的初始化方法并从各种初始化程序中调用它。此外,如果您有一个也是属性的变量,建议您应该直接设置属性而不是变量。
答案 3 :(得分:0)
我应该覆盖init方法来初始化我的变量吗?
实例变量:是的,虽然它们默认初始化为0 / nil / false。
如果变量是属性,我仍然可以通常的方式设置它们的初始值吗?
是的,你可以。 Apple建议反对它,因为子类已经覆盖了set访问器以执行意外操作的危险。在实践中,这很少是一个问题。