代码之家  ›  专栏  ›  技术社区  ›  Marcos Crispino

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

  •  3
  • Marcos Crispino  · 技术社区  · 14 年前

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

    新类有一个初始值设定项,这是创建类实例时唯一应使用的初始值设定项:

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

    问题是,UIBarButtonItem中的所有初始值设定项仍然可用,因此我可以使用

    MyCustomUIBarButtonItem *button = [[MyCustomUIBarButtonItem alloc]  initWithBarButtonSystemItem:systemItem target:target action:action];
    

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

    2 回复  |  直到 14 年前
        1
  •  3
  •   freespace    14 年前

    只需清楚地记录它,没有其他初始化器,但这一个应该使用。

    如果您真的不信任您的开发伙伴或您自己来阅读文档,您还可以重写其他初始化器并将 NSAssert(NO,@"Don't use this"); 在身体里。您可以抛出异常而不是使用断言。

        2
  •  1
  •   Ben Zotto sberry    14 年前

    你不能让其他初始化者私有化;在Obj-C中没有什么是私有的。正如freespace所建议的,您在这里所能做的最好的事情就是记录它,如果您真的需要的话,抛出其他初始值设定项的异常。

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