我只是想知道这两者之间是否有任何区别:
@interface AppDelegate : NSObject <NSApplicationDelegate>
@property ...
@end
在*.h文件中:
@interface AppDelegate()
@property ...
@end
@implementation AppDelegate
在 *.m 文件中。
我什么时候需要优先选择第一个版本,什么时候使用第二个版本更好?
我只是想知道这两者之间是否有任何区别:
@interface AppDelegate : NSObject <NSApplicationDelegate>
@property ...
@end
@interface AppDelegate()
@property ...
@end
@implementation AppDelegate
在 *.m 文件中。
我什么时候需要优先选择第一个版本,什么时候使用第二个版本更好?
任何你可以放在.h文件中的内容都可以放在.m文件中。在编译的早期阶段,导入的.h文件的内容会被直接复制到.m文件中,因此基于语句放置位置的语法差异是不存在的。
但是你会注意到,在标签之间存在语法上的差异。
@interface AppDelegate : NSObject <NSApplicationDelegate>
@interface AppDelegate()
基本上,.h 文件是你的 公有 头文件,而你的 .m 文件是你的 实现(私有)。
无论你在.m中的@interface
中放置什么内容都将是私有(类扩展等),而你在.h中的@interface
是公共的。
如果我要通过segue传递信息给UIViewController,或者需要访问某个对象中的数据,我会把我的@properties
放在.h中。否则,我就把所有东西都放在私有类扩展中(.m)。不过,你也可以只在.h文件中使用你的@properties
。
@interface AppDelegate()
@property ...
@end
@interface AppDelegate()
- (BOOL)_doCoolThing;
@end
您甚至不必声明私有方法,因为编译器只需要定义就可以正常工作,但是我总是同时声明和定义它们。
@property
声明只能出现在@interface
部分而不是@implementation
部分,因此如果您希望添加属性到现有属性中,则需要使用类扩展。 - Droppy一般来说,你可以在头文件(.h)中使用@interface
声明公共属性和方法,这些属性和方法对导入该类的其他类可见。
在实现文件(.m)中使用@interface
声明私有属性和方法,这些属性和方法仅在该类内部可见,并且不能被项目中的其他类使用或访问。