我读到使用init
方法中的属性被认为是不好的做法。但我应该使用父类专业吗?
例如
-(id) init
{
if (self = [super init])
{
self.parentProp = someVal; // (1)
parentProp = someVal; // (2)
}
return self;
}
什么是首选(1或2)以及为什么?谢谢!
答案 0 :(得分:3)
在调用super的init方法之后,它已经返回,对象的超类的一部分被初始化并准备好使用。这是正常的,并且预计在此之后您将使用其属性访问器。例如。如果您创建UIViewController
的子类,那么在您的init方法中设置(继承的)title属性或修改navigationItem
是正常的。
那就是说,你可以打破这种行为。如果你重写了一个超类的方法(包括其中一个访问器方法),然后在init方法中调用该方法,那么在你的对象完全初始化之前,要确保你的重写方法能够正常运行。
更巧妙的是,也许你已经覆盖了一个超类方法,然后你调用了一个你没有覆盖的不同超类方法。那么,如果您调用的方法转过来并调用已覆盖的方法,该怎么办?你也需要意识到这种可能性。
所有这一切,我重申,在通过调用其中一个init方法初始化它之后,使用超类的属性访问器来定制它是完全正常的。
答案 1 :(得分:1)
回答你的问题 - 他们都不是。
虽然我遇到了一般由pt.2引起的一些问题,但忽略它似乎是一种常见的做法(即在初始化程序中使用自/父类属性)。所以我会说这取决于你。在类初始化程序之外编写更多用于显式设置的代码,并确信您永远不会遇到此问题。或者可能有更简单/简短的初始化和更容易使用你的课程,但要留意这个问题。