我正在使用子类扩展类的功能,并且我正在做一些使子类的上下文中的超类方法变得危险(应用程序将在循环中挂起)的脏东西.我知道这不是一个天才的想法,但是我会选择低调的果实,现在它会节省我一些时间.哦,这是一份肮脏的工作,但有人必须这样做.
最重要的是,我需要从外部阻止该方法,或者在直接调用超类时抛出异常.(但我仍然从子类中使用它,除非小心).
最好的方法是什么?
更新---
所以这就是我的目标.我不是自我回答,因为Boaz的回答提到了多种有效的方法,这就是适合我的方式.在子类中,我重写了这样的方法:
- (int)dangerousMethod { [NSException raise:@"Danger!" format:@"Do not call send this method directly to this subclass"]; return nil; }
我将此标记为已回答,但显然这并不意味着它已经结束,欢迎进一步的建议.
只要新实现不调用不安全的超类方法,只需在子类中重新实现不安全的方法并让它不执行任何操作或抛出异常或重新实现它是安全的.
对于这里的C++工作人员:Objective C不允许您将方法标记为私有.您可以使用其类别系统将界面拆分为单独的文件(从而隐藏"私有"文件),但类上的所有方法都是公共的.
您可以覆盖要在子类的.h
文件中阻止的任何方法.您可以dangerousMethod
将以下内容放入.h
文件中以使其不可用.
- (int)dangerousMethod __attribute__((unavailable("message")));
这将使dangerousMethod
使用您的子类的任何人都无法使用该方法.
为了防止其他代码使用超类的版本此方法,您可以通过将其放在.m
文件中来进一步限制.
- (int)dangerousMethod { return nil; }