班级参考说:
如果使用标准init方法初始化UITableViewController对象,则会创建普通样式的表视图。
我不明白,这种行为来自哪里 - 我希望在某些代码中看到我 或api但是
UITableViewController在其api中没有init
一些基类'init如何知道派生类的合适默认样式?
感谢每一个提示
答案 0 :(得分:8)
每个对象都有init
方法,但很多类都有一个所谓的指定的初始化程序。这是主要的初始化程序,其他只是调用指定初始化程序的便捷方法。
根据该文档,在这种情况下,init
方法可能看起来像这样:
- (id)init
{
return [self initWithStyle:UITableViewStylePlain];
}
来自超类的方法没有出现在派生类的文档中,除非派生类重写它并且有一些重要的说法。这就是为什么你没有看到init
中记录的UITableViewController
,它是UITableViewController派生的NSObject
的一部分(通过UIScrollView - > UIView - > UIResponder - > NSObject)。 / p>
至于你问题的第二部分:基类可以(应该)永远不知道派生类的任何内容。希望使用不同默认样式的派生类可以再次覆盖init
。
答案 1 :(得分:2)
在UITableViewController.m
中- (id) init
{
return [self initWithStyle:UITableViewStylePlain];
}
init
方法将调用指定的初始化程序。