有时我会看到另一个这样的接口声明:
@interface MyCode ()
@end
这不是复制 .h 文件中的那个吗?
这是 Xcode 提供的一个类别,用于声明只能在此实现文件中使用的私有属性和方法。
您不会总是希望将您的类中的所有方法都公开给外部世界,而是将它们声明在这个私有类别中(我总是在这些私有方法前加上下划线_
(私有方法,但这完全是可选的)。
例如,这是一个我不想暴露的私有初始化方法:
@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;
}
当你想声明私有 ivars/properties/methods 时使用它。
在 .h 文件中,您有公共方法和属性,在 .m 文件中,您有私有方法和属性。
这个概念是,如果您将 .h 限制为类的公共接口,然后将私有实现细节放在此类扩展中,您可以使您的项目更加简洁。请参阅Programming with Objective-C指南中关于私有类扩展的讨论。
这个@Interface 允许你声明私有的变量、属性和方法。因此,您在此处声明的任何内容都无法从此类外部访问。通常,您希望将所有 ivars、属性和方法默认声明为私有(在此 @interface() 中),除非类的实例需要访问它们。
希望这可以帮助
这是一个类扩展。阅读更多
通常用于声明私有 ivars/properties/methods。