【问题标题】:Two interfaces in *.h and *.m files*.h 和 *.m 文件中的两个接口
【发布时间】:2012-03-06 19:58:34
【问题描述】:

对不起我的英语,让我发自内心的说:) 在我工作的一个项目中,我注意到了一个有趣的时刻。

在*.h文件中声明接口:

@interface FrontViewController : UIViewController
...
@end

在 *.m 文件中我找到了另一个接口。

@interface FrontViewController()

// Private Properties:
@property (retain, nonatomic) UIPanGestureRecognizer *navigationBarPanGestureRecognizer;

// Private Methods:
- (IBAction)pushExample:(id)sender;

@end

@implementation FrontViewController
...
@end

为什么需要它?有什么意义呢? -我认为这是为了方便。是吗?

【问题讨论】:

标签: objective-c ios cocoa-touch class-extensions


【解决方案1】:

这是一个类扩展。它通常用于声明类的私有方法和属性。

阅读here

【讨论】:

  • 嗯,除了我不能在 .h 文件中指定私有方法?或者,如果我在 .m 文件中指定私有方法,我会在检查编译以实现 .m 文件中指定的私有方法时获得额外的加分?
  • 标头是公开的类定义。
【解决方案2】:

这是一个类扩展。它允许您为类声明“私有”方法和属性,即使您无权访问源代码。主要用途是不将这些方法作为接口的一部分公开。与大多数语言不同,这些方法是运行时可发现的,因此它们的价值在于 IDE 自动完成,而不是阻止您的类的使用者调用隐藏方法,这就是我将 private 放在引号中的原因。可以在没有声明的情况下在实现中简单地定义方法,但是它们必须在使用它们的任何地方之上实现。将它们声明为扩展可以防止此问题。

如果一个扩展名被命名,那么它就成为一个类别,可用于在多个文件中分发您的类实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2012-02-19
    • 2013-01-20
    • 1970-01-01
    相关资源
    最近更新 更多