是否有一个总是在Cocoa中调用的方法?许多类都有init
或initWith
,但更糟糕的是它们可以从笔尖或其他东西加载。在这种情况下,我不想在周围找到它是如何做到的。我只想设置一些初始变量和其他东西,我想要一个可以依赖的子类方法,无论它是UIView
,UIViewController
还是UITableViewCell
等。
答案 0 :(得分:9)
没有这样的方法。 init
来自NSObject
,因此每个对象都可以使用它,并且子类也定义了自己的初始化方法。例如,UIView
定义了initWithFrame:
,并且还有来自协议的init方法,例如定义NSCoding
的{{1}}。这是Objective-C的动态特性,任何东西都可以随时扩展。话虽如此,有一些模式。 initWithCoder:
几乎总是花费UIViewController
而initWithNibName:bundle:
几乎总是花费UIView
或initWithFrame:
。我所做的是制作一个内部初始化方法,让其他人调用它。
initWithCoder:
答案 1 :(得分:0)
不是100%确定它总是被调用,但我很确定这是一个可行的选择。说实话,我不记得我曾经见过这种方法在实践中使用过,我常常回避使用这种方法(我完全不知道为什么,可能是因为它不是最干净,最全面的方法来实现这......):
-didMoveToSuperview()
来自文档:
告诉他们的超级视图发生了变化。 此方法的默认实现不执行任何操作。每当超级视图发生变化时,子类都可以覆盖它以执行其他操作。
答案 2 :(得分:-1)
您可以通过多种方式编写自定义初始化程序。
- (id)initWithString:(NSString *)string {
if((self == [super init])) {
self.string = string;
}
return self;
}
这就是我编写初始化程序的方法。例如,上面的一个字符串。 (如果你不想要,你不必传递字符串。)
顺便说一句,init是一种方法。根据NSObject的头文件,init有一个方法实现。