【发布时间】:2011-09-21 22:21:43
【问题描述】:
在 ObjC 中,如何在子类中隐藏实现超类的方法?
我不确定@private 是否能解决问题,因为它似乎只适用于 ivars。
【问题讨论】:
-
“隐藏超类的方法”是什么意思?
标签: objective-c inheritance private-methods
在 ObjC 中,如何在子类中隐藏实现超类的方法?
我不确定@private 是否能解决问题,因为它似乎只适用于 ivars。
【问题讨论】:
标签: objective-c inheritance private-methods
你是对的,@private 指令是实例变量,而不是方法。要隐藏方法的实现,只需在头文件中省略其声明即可。要抑制警告,您可以使用类别或类扩展在 .m 文件中声明方法。
不过,没有内置的语言功能可以防止子类看到该方法。为什么要这样做?
【讨论】:
Obj-C 中没有实际上“私有”方法;由于任何消息都可以在运行时发送到任何对象,因此无法阻止某人发送您关心的消息。
也就是说,您可以在子类中拦截该消息而不进行处理。使超类的方法不可访问的最简单方法是在子类中覆盖它并且什么都不做:
- (void)someMethodIDontWantToSupport
{
}
【讨论】:
标记为子类接口文件。
- (void)someMethodIDontWantToSupport __unavailable;
【讨论】: