2012-03-22 48 views
8

可能重复:
Difference between @interface definition in .h and .m file
What is the @interface declaration in .m files used for in iOS 5 projects?将@interface放在.m文件中的逻辑是什么?

我见过这样的代码:

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

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

我的问题是:

  1. 把它放在2个文件中有什么区别?
  2. 为什么在“.h”文件中的类名后面加上{},为什么在“.m”文件中加上“()”?

回答

12
@interface MyClass(){ 
    NSInteger aInt; 

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

class extension

现代编译器,这是一个伟大的方式,以decrale方法,实例变量和属性只在类MyClass的私人使用。

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

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

+0

谢谢,真的解决了我的大难题。 – itsaboutcode 2012-03-22 17:42:56

+1

您也可以创建实现属性,我发现它比类扩展更有用。 – 2012-03-22 17:44:42

+0

要在扩展中使用ivars,您必须使用llvm 3+。 GCC不知道这个语法 – vikingosegundo 2012-03-22 17:45:37

3

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

相关问题