在objective-c中将继承的方法重写为private

时间:2010-07-16 14:57:33

标签: iphone objective-c

我正在创建一个UIBarButtonItem的子类,以提供一些特定的功能。

新类有一个初始化程序,这是创建该类实例时应该使用的唯一一个:

- (id) initWithSomeObject:(SomeObject *)param;

问题是,来自UIBarButtonItem的所有初始化程序仍然可用,因此我可以使用类似

之类的东西创建新类的实例
MyCustomUIBarButtonItem *button = [[MyCustomUIBarButtonItem alloc]  initWithBarButtonSystemItem:systemItem target:target action:action];

或其他......

有没有办法在我的子类中隐藏UIBarButtomItem的初始值设定项,以便它们不能被使用?

2 个答案:

答案 0 :(得分:3)

只需清楚地记录下不应该使用其他初始化程序。

如果您真的不相信您的开发人员或您自己阅读文档,您还可以覆盖其他初始化工具并将NSAssert(NO,@"Don't use this");放在正文中。您可以抛出异常而不是使用断言。

答案 1 :(得分:1)

你不能私有其他初始化者;在Obj-C中没有任何东西是私密的。正如自由空间所暗示的那样,你在这里做的最好的就是记录它,如果你真的需要,可以从其他初始化器中抛出异常。

如果这看起来非常容易出错,那就是因为它。具有一个“指定”的初始化程序集群模式(没有语法支持)是语言或Cocoa框架/模式设计中的错误,具体取决于您如何看待它。