0

嗨,我正在通过网络上的示例代码学习 IOS 编程。我发现这段代码有些奇怪,因为它们已经有了 h.file,但在 m.file 中也有 h.file 代码。

 @interface Manager : NSObject {
}

+(void) goMenu;

这是h。文件

#import "Manager.h"

@interface Manager ()
+(void) go
+(void) wrap
@end


@implementation Manager
....

这是 m.file 的开头。

对于像我这样的初学者,这种情况让我很困惑。请有人解释一下发生了什么?

4

6 回答 6

2

@interface Manager ()在实现文件中称为类扩展

这通常用于添加开发人员希望保持私有的方法、属性等。

于 2012-08-13T11:48:25.187 回答
1

您在 .m 文件中看到的是类扩展名。您可以在此处阅读有关类扩展和类别的更多信息

于 2012-08-13T11:49:36.680 回答
0

@interface Manager ()文件中的.m主要用于声明私有方法和属性。

.h 中声明的每一件事都是(大部分)公共方法和属性。但有时您希望拥有不公开可见的方法和属性。

请注意,使用objective-c您仍然可以调用这些方法和属性,编译器将发出警告,称调用此类方法可能无法正常工作,因为调用可能无法响应这些方法。

于 2012-08-13T11:47:43.183 回答
0

.h 文件中的所有函数也可能对其他类感兴趣。这些是每个人都可以看到的公共界面。其他类文件可以#import .h 文件,因此知道所有公共函数。

另一方面,.m 文件中的函数是私有接口。直到最近,所有方法都必须在使用之前声明(也可以很方便地进行快速概览)。通过使用此构造,开发人员在 .m 文件的开头声明了方法的存在,以便可以在整个文件中使用它们。由于 .m 文件不会被导入/包含在其他文件中,因此它们本身在外部是不可见的。

但请注意,此机制不是由任何类型的安全机制强制执行的,并且可以在选择时被覆盖。

于 2012-08-13T11:48:10.377 回答
0

.m 文件中的接口被视为私有接口,Manager在其他类中引用您的类时不会显示。

但是,我相信只要不在 ( 和 ) 之间添加“Private”,就可以从其他类调用它们。(制作它@interface Manager (Private))......但你会得到一个警告,类 Manager 可能不会实现这样一个名为wrap.

于 2012-08-13T11:48:23.620 回答
0

这是一个类扩展。它可以用来有私有方法,也可以有实例。这里是链接,它给你更多的细节。

于 2012-08-13T12:06:45.667 回答