阻止其他程序员调用-init的最佳方法

Mis*_*ith 39 iphone cocoa-touch objective-c init

在设计类层次结构时,有时子类添加了一个新initWithSomeNewParam方法,并且希望禁用对init从超类继承的旧方法的调用.

首先,我在这里阅读了这个问题,其中提出的替代方法是覆盖init在运行时抛出异常,或覆盖并设置属性的默认值.在我的情况下,我不想提供默认值,我想清楚地表明不应该调用旧方法,而应该使用带参数的新方法.

因此运行时异常很好,但除非代码被调试,否则团队中的其他程序员无法注意到旧方法不再用于使用.

如果我是正确的,那么就没有办法将方法标记为"私有".所以,除了添加评论之外,有没有办法做到这一点?

提前致谢.

Dar*_*ust 106

您可以init在头文件中明确标记为不可用:

- (id) init __unavailable;
Run Code Online (Sandbox Code Playgroud)

要么:

- (id) init __attribute__((unavailable));
Run Code Online (Sandbox Code Playgroud)

使用后面的语法,您甚至可以给出一个理由:

- (id) init __attribute__((unavailable("Must use initWithFoo: instead.")));
Run Code Online (Sandbox Code Playgroud)

如果有人试图调用它,编译器会发出错误(而不是警告).

  • 非常好,也不知道. (2认同)
  • @ VinceO'Sullivan:我考虑使用`new`的是坏的风格,我知道没有人谁在使用它,但如果你这样做:只是标志着`new`与所描述的属性,该属性类为好. (2认同)