iphone - 为 UITableViewController 子类重写哪个初始化器

标签 iphone objective-c cocoa-touch designated-initializer

我有一个实例化的 UITableViewController 子类,具体取决于它的使用位置,是在 NIB 中还是通过代码。在这两种情况下,我都想在初始化方法中进行自定义。这是否意味着我需要同时实现 initWithNibName:bundle: initWithCoder:,并且每个方法都会调用其各自的 super 初始化程序?

虽然我现在不需要这个,但如果我还希望能够使用 initWithStyle: 实例化 View Controller 怎么办?那么我是否需要 3 个不同的 init 方法来复制相同的行为?

这似乎违反了整个指定初始化器约定,因为本质上有 3 个独立的初始化器,它们最终不会调用公共(public)初始化方法。或者有没有办法在支持 3 种不同的实例化路由的同时创建一个通用的指定初始化程序?

最佳答案

我的困惑是基于错误的信念,即每个类都应该有一个指定的初始化器。这不是真的,在 UITableViewController 的情况下,有 3 个指定的初始化程序(据我所知):

  1. initWithStyle: 本地声明
  2. initWithNibName:bundle: 继承自 UIViewController
  3. initWithCoder:采用NSCoding协议(protocol)

您需要根据子类的实例化方式在子类中覆盖 1 个或更多。在我的例子中,我必须实现#2 和#3,因为类可以从 NIB 加载,或者通过引用 NIB 的代码实例化。 (我想您很少会在一个类中同时使用 initWithStyle:initWithNibName:bundle:。)

我找到了 Apple 的 Coding Guidelines for Cocoa 很有帮助。

关于iphone - 为 UITableViewController 子类重写哪个初始化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/743010/

相关文章:

ios - 如何在表格 View 单元格的背景中设置图像动画

iphone - 用于检测应用统计信息的 iOS 库

ios - 如何与世界各地的随机人进行匹配并跨设备发送数据?

objective-c - 显示导航栏时 viewWillAppear 中的正确 self.view.frame

ios - 何时以及如何正确停用您的 Audio Session ?

iphone - 卡在画外音

iphone - 暂时阻止 UITableViewCell 被回收

ios - 对音量按钮没有响应 - objective-c

iphone - NSXMLParser 和 XML 类型 ="html"HTML 编码

iphone - 自定义 iPhone 键盘