UITableViewController init与initWithStyle

时间:2011-03-09 13:42:34

标签: objective-c ios

班级参考说:

如果使用标准init方法初始化UITableViewController对象,则会创建普通样式的表视图。

我不明白,这种行为来自哪里 - 我希望在某些代码中看到我 或api但是

  • UITableViewController在其api中没有init

  • 一些基类'init如何知道派生类的合适默认样式?

感谢每一个提示

2 个答案:

答案 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方法将调用指定的初始化程序。