4

在上一个版本的 oxxCode (4.3) 中,我看到了在 .m 文件中进行接口声明的预定义模板(例如我们的 Master/Detail 模板)。例如,在文件 MyFile.h 中有:

@interface MyFile

@property (nonatomic, retain) NSString *someProp;

@end

在 MyFile.m 文件中有:

@implementation MyFile

@interface MyFile {
    NSString * anotherProp;
}

- (id) init...

为什么用这种方式制作?为什么 anotherProp 没有声明到 MyFile.h 文件中?

提前致谢

4

1 回答 1

5

好吧,它不是这样声明的,而是这样声明的:-

@interface ClassName() {

    Declarations;

}

Methods;

@end

这些被称为类扩展。它们类似于类别,但只能在类的实现中声明,不能在任何其他类中声明。扩展的用途是重新声明公共或可读写的属性,如果需要,还可以声明更新的属性。它们只允许您在@interface 以外的地方声明属性和变量,因此名称可扩展。

引入它是为了解决类别的问题,因为它们使方法公开并且类的数据隐藏能力得到补偿,但是类扩展有效地扩展了类的主接口,其声明的方法与类的公共主接口中声明的方法具有相同的要求界面。

于 2012-05-18T06:52:58.940 回答