iOS之类扩展

来源:互联网 发布:知史以明鉴 查古以至今 编辑:程序博客网 时间:2024/06/02 13:12
        一般初学者在项目开发中会经常遇到以下奇怪的用法
新建一个 ViewController 类,那么xcode会自动创建以下文件:ViewController.h 和 ViewController.m

ViewController.h 如下

@interface ViewController : UIViewController@end

ViewController.m 如下

@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}@end

为什么在.m 文件里面的开头,还会有一个 @interface ViewController的声明?

原来,在objective-c中把.m文件中的@interface部分为类扩展(Class Extensions)。一般来说.m文件不像.h文件一样暴露到外部,所以.m文件中声明的方法外面并不知道,但是实际上还是可以调用的。 把要公开的信息(变量,属性,方法)定义在头文件里, 把要隐藏的信息定义在类扩展里,只是为了隐藏私有信息, 不需要被外界知道的就不要放在头文件里, 这样可以隔离接口和实现。因此其被设计出来就是为了解决两个问题的,

其一,定义类私有方法的地方。
其二,实现public readonly,private readwrite的property(意思是在h头文件中定义一个属性对外是readonly的,但在类的内部希望是可读写的,所以可以在m源文件中的@interface部分重新定义此属性为readwrite,此时此属性对外是只读的,对内是读写的)。
此外,也可在此部分申明变量和属性,但申明的变量,属性和方法均为私有的,只能够被当前类访问,相当于private。




0 0
原创粉丝点击