为了账号安全,请及时绑定邮箱和手机立即绑定

请教在Object-C中创建抽象类

请教在Object-C中创建抽象类

iOS
莫回无 2019-08-03 03:03:32
在Object-C中创建抽象类我最初是一个Java程序员,现在正在使用Object-C。我想创建一个抽象类,但在Object-C中这似乎是不可能的。这个是可能的吗?如果不是,我在目标C中离抽象类有多近?
查看完整描述

3 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

通常情况下,Object-C类只是按照约定抽象的-如果作者将类文档作为抽象类,就不要在没有子类的情况下使用它。但是,没有任何编译时强制执行可以阻止抽象类的实例化.事实上,没有什么可以阻止用户通过类别(即在运行时)提供抽象方法的实现。您可以通过在抽象类中的方法实现中引发异常,强制用户至少重写某些方法:

[NSException raise:NSInternalInconsistencyException 
            format:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)];

如果您的方法返回一个值,则使用起来更容易一些

@throw [NSException exceptionWithName:NSInternalInconsistencyException
                               reason:[NSString stringWithFormat:@"You must override %@ in a subclass", 
                               NSStringFromSelector(_cmd)]
                             userInfo:nil];

因此,您不需要从方法中添加返回语句。

如果抽象类实际上是一个接口(即没有具体的方法实现),那么使用Object-C协议是更合适的选择。



查看完整回答
反对 回复 2019-08-05
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

不,无法在Object-C中创建抽象类。

您可以模拟一个抽象类-通过使方法/选择器调用doNotRecognizeSelector:从而引发一个异常,使该类不可用。

例如:

- (id)someMethod:(SomeObject*)blah{
     [self doesNotRecognizeSelector:_cmd];
     return nil;}

您也可以为init这样做。


查看完整回答
反对 回复 2019-08-05
  • 3 回答
  • 0 关注
  • 415 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信