在iOS中是否有一个始终被调用的init方法?

时间:2012-08-01 01:19:38

标签: ios objective-c cocoa-touch init

是否有一个总是在Cocoa中调用的方法?许多类都有initinitWith,但更糟糕的是它们可以从笔尖或其他东西加载。在这种情况下,我不想在周围找到它是如何做到的。我只想设置一些初始变量和其他东西,我想要一个可以依赖的子类方法,无论它是UIViewUIViewController还是UITableViewCell等。

3 个答案:

答案 0 :(得分:9)

没有这样的方法。 init来自NSObject,因此每个对象都可以使用它,并且子类也定义了自己的初始化方法。例如,UIView定义了initWithFrame:,并且还有来自协议的init方法,例如定义NSCoding的{​​{1}}。这是Objective-C的动态特性,任何东西都可以随时扩展。话虽如此,有一些模式。 initWithCoder:几乎总是花费UIViewControllerinitWithNibName:bundle:几乎总是花费UIViewinitWithFrame:。我所做的是制作一个内部初始化方法,让其他人调用它。

initWithCoder:

答案 1 :(得分:0)

不是100%确定它总是被调用,但我很确定这是一个可行的选择。说实话,我不记得我曾经见过这种方法在实践中使用过,我常常回避使用这种方法(我完全不知道为什么,可能是因为它不是最干净,最全面的方法来实现这......):

-didMoveToSuperview()

来自文档:

  

告诉他们的超级视图发生了变化。   此方法的默认实现不执行任何操作。每当超级视图发生变化时,子类都可以覆盖它以执行其他操作。

答案 2 :(得分:-1)

您可以通过多种方式编写自定义初始化程序。

- (id)initWithString:(NSString *)string {
    if((self == [super init])) {
        self.string = string;
    }
    return self;
}

这就是我编写初始化程序的方法。例如,上面的一个字符串。 (如果你不想要,你不必传递字符串。)

顺便说一句,init是一种方法。根据NSObject的头文件,init有一个方法实现。