*.h和*.m文件中的两个接口

4
抱歉我的英文不好,让我们用中文说吧 :) 在我工作的一个项目中,我注意到了一个有趣的问题。
在*.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

为什么需要这个?这有什么用呢?-我认为这是为了方便。对吗?

因为我编写了ObjectiveC++代码,而C++也有头文件和实现文件。 - Ilya Ilin
1
这个问题已经被回答了很多次。这里是其中一个:@interface定义在.h和.m文件中的区别 - jscs
抱歉,我找不到之前发布的问题。 - Ilya Ilin
2个回答

6
这是一个类扩展。通常用于为类声明私有方法和属性。
在这里阅读更多信息: 这里

哦,除非我不能在.h文件中指定私有方法?或者如果我在.m文件中指定私有方法,我会在编译时的检查中获得额外的加号以实现在.m文件中指定的私有方法? - Ilya Ilin
头文件是公开可用的类定义。 - N_A

3
这是一个类扩展。它允许您为类声明“私有”方法和属性,即使您没有访问源代码也可以实现。主要用途是不将这些方法作为接口的一部分公开。与大多数语言不同的是,这些方法在运行时可以被发现,因此其价值在于IDE自动完成,而不是防止使用您的类的消费者调用隐藏的方法,这就是我在引号中放置“private”的原因。当然,也可以在实现中简单地定义方法而不进行声明,但是这样必须在任何使用它们的地方之前实现它们。将它们声明为扩展可以避免这个问题。
如果扩展被命名,则它将成为一个类别,可用于在多个文件中分发您的类实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接