Chr*_*ris 41 methods objective-c pure-virtual
我想去那里.但说真的,如何以"Apple"方式实现纯虚方法?您是否使用基类的协议并在这些方法上抛出异常?
Jer*_*myP 55
在Objective-C中编程时,您需要清除虚拟方法等内容.您不会在Objective-C对象上调用方法,而是向它们发送消息.对象要么响应消息要么不响应消息,但是由于动态绑定,在运行时才能告诉它.
因此,您可以在基础对象上声明一个方法而不是提供实现,没有问题(编译器警告除外),但是当您使用此类方法直接实例化对象时,您不能让编译器标记出来并且它赢了除非您实际将该消息发送到对象,否则不会在运行时抛出错误.
创建"虚拟"基类的最佳方法(在我看来)是声明方法并为其提供一个抛出适当异常的存根实现.
Dar*_*ust 33
在Objective-C中,没有像C++那样的纯虚拟支持.
模拟是您在接口中声明一个方法但不在.m文件中实现它.当然你会得到编译器警告但是IIRC可以关闭它们.但是如果你没有在子类中覆盖它们,你将不会得到警告/错误,这是你在C++(IIRC)中得到的.
另一种方法是仅使用一个NSAssert(NO, @"Subclasses need to overwrite this method");
实体来实现它们.但是,你只能在运行时捕获它,而不是编译时.
根据您正在执行的操作,委托模式可能比子类更合适,其中委托定义为id<YourDelegateProtocol>
.如果未实现委托协议中的所需方法,编译器将生成警告.
在Objective-C中通常避免使用子类,因为对象不能从多个超类继承,但它们可以实现多个协议.
小智 6
你应该使用:
- (void)doesNotRecognizeSelector:(SEL)aSelector method.
Run Code Online (Sandbox Code Playgroud)
如Apple所述,请访问:https://developer.apple.com/library/mac/#documentation/cocoa/reference/Foundation/Classes/NSObject_Class/Reference/Reference.html
归档时间: |
|
查看次数: |
21144 次 |
最近记录: |