【问题标题】:Methods required to be implemented when subclassing in Objective C在Objective C中子类化时需要实现的方法
【发布时间】:2012-07-22 04:01:42
【问题描述】:

我一般是编程新手(尽管我在很多很多年前上过 C 课)并且正在学习 Objective-C 以在 iPhone 上进行编程。我有一个我认为很简单的问题,但是在寻找了一段时间(几天,断断续续)之后,我找不到我正在寻找的明确答案。

我知道在继承一个 Objective-C 类时,我应该实现 initialize 方法和 deallocate 方法(除非为后者使用 ARC,如果我是正确的?)。问题是:

  1. 是否只有这两个需要担心,或者其他类是否可能具有需要实现的其他方法?
  2. 如果其他类可能有我在子类化它们时需要实现的方法,那么通常在哪里可以找到该文档? (我似乎没有在 Apple 框架文档中看到这一点,尽管它出现的协议中有这种信息)

感谢您的帮助!

【问题讨论】:

  • 没有必要的方法来实现,除非你没有继承 NSObject。如果你不是,那么事情就会变得有趣......
  • 感谢您的回复!我知道协议等其他东西需要实现。
  • 感谢所有回复的人。这很有帮助!

标签: objective-c ios methods subclassing


【解决方案1】:
  • 从技术上讲,如果继承的版本足够,您甚至不需要实现 initdealloc。此外,ARC 并不能让您在所有情况下都不必写dealloc(但它肯定涵盖了绝大多数)。例如,如果您使用malloc 为对象分配内存,则需要在dealloc 中释放它。
  • 向类中添加实例变量时,需要对其进行初始化。通常,您在指定的初始化程序中执行此操作。同样,如果您不初始化任何东西,则不必编写自己的初始化程序;反初始化器也是如此。
  • 唯一需要实现方法的情况是当您采用带有一个或多个方法标记为@requried 的协议时。这些方法在协议参考中都有标记。例如tableView:cellForRowAtIndexPath:tableView:numberOfRowsInSection:Apple's documentation 中标有“必需方法”标签。

【讨论】:

【解决方案2】:

子类化 NSObject(或其任何子类,如 UIViewController、UIView 等)时不需要任何方法。

如果您创建一个新的,比如 UIViewController,通常最好将您在新创建的文件中找到的方法保留为指南/模板,但您实际上并不需要保留任何方法。超类总是会调用自己的方法。

但请注意,有些方法必须调用 super,例如 viewWillAppear 等。

【讨论】:

  • 谢谢!我在 UIViewController 中看到了模板。希望有一个 NSObject 并且没有看到一个(不是说它不存在)。但不想接受,因为什么都不需要!感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-19
  • 2011-07-10
  • 1970-01-01
相关资源
最近更新 更多