我只是想知道:
之间是否有任何区别@interface AppDelegate : NSObject <NSApplicationDelegate>
@property ...
@end
* .h文件中的和:
@interface AppDelegate()
@property ...
@end
@implementation AppDelegate
* .m文件中的。
我什么时候需要首选版本以及何时使用第二版本?
答案 0 :(得分:5)
您可以将任何内容放入.h文件中,然后放入.m文件中。导入的.h的内容在编译的早期阶段直接复制到.m中,因此根据语句的放置位置没有语法差异。
但是你会注意到是
之间的语法差异@interface AppDelegate : NSObject <NSApplicationDelegate>
和
@interface AppDelegate()
第二种形式是已经描述过的接口的扩展,而不是新的(和冲突的)版本。放在.m中的事实(这不是必需的 - 它可以放在.h中而不会引发错误)意味着导入.h的任何其他模块都不会“看到”它,使其成为“私有” “(与Objective-C中的任何内容都是私有的)。
答案 1 :(得分:4)
基本上, .h 文件是您的公共标头, .m 文件是您的实施 (的私有强>)。
您在 .m 的@interface
中放置的内容将是私有(类别扩展名,不包括哪些内容),以及您的@interface
in您的 .h 是公开。
如果我要使用segue将内容传递给UIViewController,或者如果我需要访问某个对象中的数据,我会将@properties
放入 .h 中。否则我只是将所有内容都放在私有类扩展中( .m )。不过,您只能在 .h 文件中使用@properties
。
答案 2 :(得分:2)
代码:
@interface AppDelegate()
@property ...
@end
创建一个私有类扩展,无法从类实现文件外部看到它,使其成为私有,而不是头文件中 public 。< / p>
考虑到Objective-C的动态特性,一旦你压制了编译器警告,它仍然可以从其他类调用私有属性。
它也可用于声明私有方法,我使用_
作为前缀,以区别于公共方法,但不要求这样做。
@interface AppDelegate()
- (BOOL)_doCoolThing;
@end
你甚至不必声明私有方法,因为只要定义编译器就可以正常工作,但我总是同时声明和定义它们。
答案 3 :(得分:2)
一般来说,您使用头文件(.h)中的@interface
来声明 public 属性和方法,这些属性和方法对于导入此类的其他类都是可见的。
实现文件(.m)中的@interface
用于声明私有属性和方法,这些属性和方法仅在该类中可见,并且不能被其他类使用或访问在你的项目中。
答案 4 :(得分:1)