在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
,我希望tempBar
中MyType
实施JSONArray flightStatuses = response.getJSONArray("flightStatuses");
JSONObject object = flightStatuses.getJSONObject(0);
至少发出警告。
Objective-C中是否有任何方法指定方法应该是协议方法的实现?
答案 0 :(得分:1)
Objective-C是一种动态语言,在编译时不可能强制执行。请注意,在Obj-C中,您实际上可以调用甚至不存在的方法,并且应用程序不会崩溃(嗯,默认实现会引发异常,但您可以更改该行为)。
该方法也可以添加到扩展中,或者在运行时添加。或者它不在标题中。
注意还有相反的问题。在进行子类化时,您可以覆盖一个您甚至不知道存在的方法,因为它不存在于标题中。
这就是为什么Apple转向更可预测的语言,即Swift。