我最初是一名 Java 程序员,现在使用 Objective-C。我想创建一个抽象类,但这在 Objective-C 中似乎是不可能的。这可能吗?
如果不是,我可以在 Objective-C 中获得多接近抽象类?
通常,Objective-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];
这样您就不需要从该方法中添加 return 语句。
如果抽象类真的是一个接口(即没有具体的方法实现),那么使用Objective-C 协议是更合适的选择。