UITableViewController的init与initWithStyle方法区别

4

类引用说明:

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

我不理解这种行为是从哪里来的 - 我想在一些代码或API中看到它,但是

  • UITableViewController在其API中没有init方法

  • 某个基类的init如何知道适合派生类的默认样式?

感谢每一个提示

2个回答

8
每个对象都有一个init方法,但是很多类都有所谓的指定初始化器。那是主要的初始化器,其他的只是调用该指定初始化器的方便方法。
根据该文档,在这种情况下,init方法可能看起来像这样:
- (id)init
{
    return [self initWithStyle:UITableViewStylePlain];
}

在派生类的文档中,来自超类的方法不会出现,除非派生类覆盖了它并且有重要的信息需要说明。这就是为什么在UITableViewController的文档中看不到init的文档,因为UITableViewController是通过UIScrollView -> UIView -> UIResponder -> NSObject继承自NSObject

至于你提问的第二部分:基类不能(也不应该)知道任何关于派生类的事情。如果一个派生类想要一个不同的默认风格,只需再次覆盖init即可。


如果可以的话,我更喜欢在文档中加入init方法,因为它有一些重要的内容(与NSObject的不同)- 而不是将其放在某个神秘的讨论注释中!无论如何,谢谢 :-) - Klaus Ahrens

2

在UITableViewController.m中

- (id) init 
{
   return [self initWithStyle:UITableViewStylePlain];
}

init方法将调用指定的初始化器。


但是这个实现不可用,所以我真的更喜欢在文档中进行初始化... - Klaus Ahrens
这就解释了为什么在UITableViewController上执行默认初始化时会神秘地调用styleWithStyle。我同意这有点令人困惑。 - ComDubh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接