Objective-C"覆盖"符

时间:2017-11-08 09:11:37

标签: objective-c xcode clang

在Java,C ++ 11和其他一些语言中,您可以指定一个方法旨在从基类或接口覆盖另一个方法,如果您稍后从基类中删除该方法,则会得到一个编译器错误。我经常使用带有可选方法的协议,并发现如果我从那里删除一个方法,我倾向于忘记删除实现该方法的代码。这不会产生错误或警告,从而造成“死亡”和“死亡”。方法

考虑:

@protocol Prot <NSObject>
@optional
- (void)bar;
- (void)tempBar;
@end

@interface MyType : NSObject <Prot>
@end

@implementation MyType
- (void)bar { /**/ }
- (void)tempBar { /**/ }
@end

如果我一度从协议中删除tempBar,我希望tempBarMyType实施JSONArray flightStatuses = response.getJSONArray("flightStatuses"); JSONObject object = flightStatuses.getJSONObject(0); 至少发出警告。

Objective-C中是否有任何方法指定方法应该是协议方法的实现?

1 个答案:

答案 0 :(得分:1)

Objective-C是一种动态语言,在编译时不可能强制执行。请注意,在Obj-C中,您实际上可以调用甚至不存在的方法,并且应用程序不会崩溃(嗯,默认实现会引发异常,但您可以更改该行为)。

该方法也可以添加到扩展中,或者在运行时添加。或者它不在标题中。

注意还有相反的问题。在进行子类化时,您可以覆盖一个您甚至不知道存在的方法,因为它不存在于标题中。

这就是为什么Apple转向更可预测的语言,即Swift。