将@interface放在.m文件中的逻辑是什么?

时间:2012-03-22 17:32:17

标签: objective-c

  

可能重复:
  Difference between @interface definition in .h and .m file
  What is the @interface declaration in .m files used for in iOS 5 projects?

我见过这样的代码:

// In Header.h
@interface Header{}
@end

// In Header.m
@interface Header()
@end

我的问题是:

  1. 将它放入2个文件有什么区别?
  2. 为什么在“.h”文件中输入类名后的{}以及“.m”文件中的“()”为什么?

2 个答案:

答案 0 :(得分:12)

@interface MyClass(){
    NSInteger aInt;

}
@property(nonatomic,strong) NSString *name;
@end

class extension

使用现代编译器,这是一种很好的方法,只能在MyClass类中私有化地使用方法,ivars和属性。

类扩展必须在主实现文件中声明(不在类别中)。

因此,您可以隐藏头文件中的实现细节,它们是私有的。

答案 1 :(得分:3)

这已成为为给定类声明“私有”属性/方法的常见做法。通过在.m内的匿名类扩展中声明它们,这些属性/方法不会暴露给消费对象。