Why is there another @interface inside the.m file?
本问题已经有最佳答案,请猛点这里访问。
有时我会看到另一个这样的接口声明:
1 2 3 | @interface MyCode () @end |
这不是在复制.h文件中的那个吗?
这是Xcode提供的一个类别,用于声明仅在此实现文件中可用的私有属性和方法。
您不会总是希望将类中的所有方法公开给外部世界,而是在这个私有类别中声明它们(我总是在这些私有方法前面加上下划线(
例如,这里有一个我不希望公开的私有初始化方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | @interface MyClass () - (BOOL)_init; @end @implementation MyClass - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self != nil) { if (![self _init]) self = nil; } return self; } - (id)initWithCoder:(NSCoder *)coder { self = [super initWithCoder:code]; if (self != nil) { if (![self _init]) self = nil; } return self; } - (BOOL)_init { self.something = whatnot; self.thingA = self.thingB; return YES; } |
当您想要声明私有的ivar/properties/methods时使用它。
这是一个类扩展。多读
通常用于声明私有IVAR/属性/方法。
这个@interface允许您声明私有的ivar、属性和方法。所以您在这里声明的任何内容都不能从这个类之外访问。通常,除非类的一个实例需要访问它们,否则您希望将所有的ivar、属性和方法默认声明为private(在此@interface()中)。
希望这有帮助
概念是,如果将.h限制在类的公共接口上,然后在此类扩展中放置私有实现细节,则可以使项目更干净。请参阅《使用Objective-C编程指南》中有关私有类扩展的讨论。
在.h文件中,您有公共方法和属性,在.m文件中,您有私有的。