各种@interface声明,有些带括号

时间:2011-10-12 18:44:59

标签: objective-c interface class-design

我注意到Objective-c类的各种@interface声明。我想了解为什么开发人员通过以下方式声明@interface

// in the .h file
@interface MyClass : NSObject
// ...
@end

// in the .m file (what's the purpose of the parens?)
@interface MyClass ()
// more property declarations which seem like they can go in the .h file
@end

// again in the .m file (what's the purpose of private?)
@interface MyClass (Private)
// some method declarations
@end

3 个答案:

答案 0 :(得分:5)

这只是一个普通的class interface,继承自NSObject,你声明了ivars,属性和方法

// in the .h file
@interface MyClass : NSObject
// ...
@end

以下两个是categories,它们允许您向类添加方法。但它不是子类(不要声明具有相同名称的方法,因为您将无法访问原始方法)。如果您有一个命名的接口类别(如@interface MyClass (Private)),则应在@implementation MyClass (Private)中提供实现,对于未命名的类别(也称为扩展),可以照常提供实现。请注意,扩展还允许您将ivars添加到类中,而(命名)类别则不允许。

// in the .m file (what's the purpose of the parens?)
@interface MyClass ()
// more property declarations which seem like they can go in the .h file
@end

// again in the .m file (what's the purpose of private?)
@interface MyClass (Private)
// some method declarations
@end

答案 1 :(得分:2)

它用于声明私有方法。

此回复详细说明了这一点:What are best practices that you use when writing Objective-C and Cocoa?

答案 2 :(得分:-1)

.m文件中的内容是私有的。 parens用于类别,因此您可以将代码分类为类别以使其更具可读性。因为代码在.m和私有,他们称之为私有类别。