当它们打算被子类覆盖时,在.h中声明方法是不错的风格?

1 iphone cocoa-touch objective-c

我有一个旨在抽象的课程.这意味着:当有人将其子类化时,必须覆盖一些方法.

但另一方面,除了抽象类(子类的超类)之外,这些方法并不打算从任何地方手动调用.

我必须在.h中声明这些方法,或者我可以在.h中添加注释"你必须覆盖-foo和-bar"吗?或者是否有更好的模式来制作抽象方法?

Ben*_*n S 5

相关:有没有办法在Objective C中创建一个抽象类?

Objective-C实际上没有办法将类声明为抽象.来自Apple的文档:

抽象类

某些类仅设计或主要是为了使其他类可以从它们继承.这些抽象类将方法和实例变量分组,这些方法和实例变量可以被许多不同的子类用于公共定义.抽象类本身通常是不完整的,但包含有用的代码,可以减少其子类的实现负担.(因为抽象类必须具有有用的子类,所以它们有时也称为抽象超类.)

与其他一些语言不同,Objective-C没有将类标记为抽象的语法,也没有阻止您创建抽象类的实例.

NSObject类是Cocoa中抽象类的规范示例.你永远不会在一个应用程序中使用NSObject类的实例 - 它对任何事情都没有好处; 它将是一个通用的对象,能够无所作为.

另一方面,NSView类提供了一个可能偶尔会直接使用的抽象类实例的示例.

抽象类通常包含有助于定义应用程序结构的代码.当您创建这些类的子类时,新类的实例可以毫不费力地适应应用程序结构,并自动与其他对象一起工作.

因此,要回答您的问题,是的,您需要将方法签名放在标头中,并且应该在基类中实现该方法,以便在调用时生成错误,就像相关问题的答案状态一样.

您还可以使用协议强制类实现某些方法.

但是,您选择实现基类,清楚地在标题和文档中记录文档,确切地说该类假设以及如何正确地对其进行子类化.