我最初是一名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协议是更合适的 Select .

Objective-c相关问答推荐

多个 WKWebView 之间的 Cookie 共享

Objective-C:在字符串中查找数字

具有动态高度的子视图的自动布局 UIScrollView

如何在 Cocoa 中创建字符串的 MD5 哈希?

使用 CALayer 时无法编译代码

NSLocalizedString 格式

在 Xcode 中为无法识别的 Select 器创建断点

xcode 未知类型名称

获取对 UIApplication 委托的引用

如何以编程方式退出 mac 应用程序?

如何从 AVPlayer(不是 AVAudioPlayer)获取持续时间?

iOS 7 - 键盘动画

如何在情节提要场景中嵌入自定义视图 xib?

在不导入自己的情况下播放系统声音

NSURLConnection sendAsynchronousRequest:queue:completionHandler:连续发出多个请求?

立即检测 iOS 方向变化

判断是否已实现可选协议方法

根据文本量更改 UITableViewCell 高度

即使在静音模式下也能在 iPhone 上播放声音

如何更新 Core Data 中的现有对象?