2012-08-13 34 views
0

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

@interface Manager : NSObject { 
} 

+(void) goMenu; 

这是h。文件

#import "Manager.h" 

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


@implementation Manager 
.... 

并且这是m.file的开头。

对于像我这样的初学者来说,这种情况让我感到非常困惑。请有人解释我发生了什么?

回答

2

@interface Manager()在执行文件中被称为class extension

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

0

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

在.h中声明的每个东西都是(大部分)公共方法和属性。但有时候你想拥有不公开的方法和属性。

要知道,与Objective-C的你仍然可以调用这些方法和属性,编译器会给出一个警告有关调用这样的方法可能由于呼叫NOG工作可能不responde的方法。

0

.h文件中的所有函数也可能对其他类感兴趣。这些是每个人都能看到的公共界面。其他类文件可以#导入.h文件,从而了解所有公共功能。

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

请注意,这种机制不是由任何种类的安全机制强制执行的,并且如果您选择的话可以被覆盖。

0

界面中你.m文件被视为私人和引用您在其他类Manager类时未显示。

但是,我相信你可以从其他类中调用它们,只要你不在(和)之间添加“Private”即可。 (使其成为@interface Manager (Private))...但您会收到警告,说明班级经理可能无法实施wrap这种方法。

1

你在.m文件中看到的是类扩展名。你可以阅读更多关于类扩展和类别here

0

这是一个类扩展。它可用于具有私有方法,实例also.Here是link,给你一点点的更多细节。