我正在创建一个UIBarButtonItem的子类,以提供一些特定的功能。
新类有一个初始化程序,这是创建该类实例时应该使用的唯一一个:
- (id) initWithSomeObject:(SomeObject *)param;
问题是,来自UIBarButtonItem的所有初始化程序仍然可用,因此我可以使用类似
之类的东西创建新类的实例MyCustomUIBarButtonItem *button = [[MyCustomUIBarButtonItem alloc] initWithBarButtonSystemItem:systemItem target:target action:action];
或其他......
有没有办法在我的子类中隐藏UIBarButtomItem的初始值设定项,以便它们不能被使用?
答案 0 :(得分:3)
只需清楚地记录下不应该使用其他初始化程序。
如果您真的不相信您的开发人员或您自己阅读文档,您还可以覆盖其他初始化工具并将NSAssert(NO,@"Don't use this");
放在正文中。您可以抛出异常而不是使用断言。
答案 1 :(得分:1)
你不能私有其他初始化者;在Obj-C中没有任何东西是私密的。正如自由空间所暗示的那样,你在这里做的最好的就是记录它,如果你真的需要,可以从其他初始化器中抛出异常。
如果这看起来非常容易出错,那就是因为它。具有一个“指定”的初始化程序集群模式(没有语法支持)是语言或Cocoa框架/模式设计中的错误,具体取决于您如何看待它。