Dan*_*ann 5 methods inheritance objective-c enforcement ios
我有一个基本视图控制器,许多其他视图控制器子类.有没有办法强制执行某些必须在子类中重写的方法?
为了安全起见,比什么都重要.
干杯
rjs*_*ing 12
在Xcode中(使用clang等)我喜欢使用__attribute__((unavailable(...)))标记抽象类,以便在尝试使用它时收到错误/警告.
它提供了一些防止意外使用该方法的保护.
在基类@interface标记中的"抽象"方法:
- (void)myAbstractMethod:(id)param1 __attribute__((unavailable("You should always override this")));
Run Code Online (Sandbox Code Playgroud)
更进一步,我创建了一个宏:
#define UnavailableMacro(msg) __attribute__((unavailable(msg)))
Run Code Online (Sandbox Code Playgroud)
这可以让你这样做:
- (void)myAbstractMethod:(id)param1 UnavailableMacro("You should always override this");
Run Code Online (Sandbox Code Playgroud)
就像我说的,这不是真正的编译器保护,但它与你不会使用不支持抽象方法的语言一样好.
在其他语言中,这是使用抽象类和方法完成的.在Objective-C中没有这样的东西.
最接近的是在超类中引发异常,因此子类被"强制"覆盖它们.
[NSException raise:NSInternalInconsistencyException format:@"Subclasses must override %@", NSStringFromSelector(_cmd)];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2928 次 |
| 最近记录: |