0

有时我会看到另一个这样的接口声明:

@interface MyCode ()

@end

这不是复制 .h 文件中的那个吗?

4

6 回答 6

5

这是 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;
}
于 2013-02-26T16:36:46.750 回答
1

当你想声明私有 ivars/properties/methods 时使用它。

于 2013-02-26T16:36:26.423 回答
0

在 .h 文件中,您有公共方法和属性,在 .m 文件中,您有私有方法和属性。

于 2013-02-26T16:36:53.943 回答
0

这个概念是,如果您将 .h 限制为类的公共接口,然后将私有实现细节放在此类扩展中,您可以使您的项目更加简洁。请参阅Programming with Objective-C指南中关于私有类扩展的讨论。

于 2013-02-26T16:37:20.380 回答
0

这个@Interface 允许你声明私有的变量、属性和方法。因此,您在此处声明的任何内容都无法从此类外部访问。通常,您希望将所有 ivars、属性和方法默认声明为私有(在此 @interface() 中),除非类的实例需要访问它们。

希望这可以帮助

于 2013-02-26T16:38:08.327 回答
0

这是一个类扩展。阅读更多

通常用于声明私有 ivars/properties/methods。

于 2013-02-26T16:38:12.267 回答