您好我正在通过网络上的示例代码研究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的开头。
对于像我这样的初学者来说,这种情况让我很困惑。请有人解释我发生了什么事?
答案 0 :(得分:2)
@interface Manager ()
称为class extension。
这通常用于添加开发人员希望保密的方法,属性等。
答案 1 :(得分:1)
您在.m文件中看到的是类扩展。您可以阅读有关课程扩展和类别here
的更多信息答案 2 :(得分:0)
@interface Manager ()
文件中的.m
主要用于声明私有方法和属性。
.h中声明的每个事物(主要是)公共方法和属性。但有时你想要的方法和属性不公开。
请注意,使用objective-c,您仍然可以调用这些方法和属性,编译器会发出警告,调用这样的方法可能会因为调用可能无法响应方法而无法工作。
答案 3 :(得分:0)
.h文件中的所有函数也可能对其他类感兴趣。这些是每个人都可以看到的公共界面。其他类文件可以#import .h文件,因此知道所有公共函数。
另一方面,.m文件中的函数是私有接口。直到最近,所有方法都必须在使用之前声明(也可以方便快速浏览)。通过使用此构造,开发人员在.m文件的开头声明了方法的存在,以便可以在整个文件中使用它们。由于.m文件不会导入/包含在其他文件中,因此它们本身不是外部可见的。
请注意,此机制并未由任何类型的安全机制强制执行,如果选择,则可以覆盖此机制。
答案 4 :(得分:0)
您.m文件中的接口被视为私有,并且在其他类中引用您Manager
类时未显示。
但是,我相信你可以从其他课程中调用它们,只要你不在(和)之间添加“私人”。 (使其成为@interface Manager (Private)
)...但是您会收到警告,类经理可能不会实现这样一个名为wrap
的方法。
答案 5 :(得分:0)
这是一个类扩展。它可以用于私有方法,实例也是。这里有link,它可以为您提供更多详细信息。