.h
新建一个项目在.h文件中可以看到:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end
.h 文件是给其他的class调用,在@interface关键字里面申明的成员属性和方法都是可以被外界看到的。
#import
1. #import"" 和 #import<>
#import"" //一般用于引入自己定义的头文件
#import<> //用于引入系统或者第三方库中的头文件
2. #import 和 #include
#include是c中引入头文件的方法,在oc中一样的能用,但是两者的区别在与:#include多次相同的文件会报错。
#include //相当于是拷贝头文件的声明内容,当多次引入相同的头文件的时候,会报重复定义的错误。
#import //在判断是否已经引入,如果引入了一次就不在引入。
3. @class关键字
在oc中#import和@class都可以来引用别的类型,两者之间的区别在于:
@class someClass //只是让编译器知道有someClass这个类,
引入之后你可以声明一个someClass类。
但是没有实质的映入someClass的头文件,
不能够访问someClass的成员和方法。
相当于提前声明的作用。
如果需要在@implementation中使用其中的方法,还需要#import"someClass.h"
当然@class关键字作用绝不仅于此,对比#import还会有其他作用:
【1】在编译效率方面考虑,如果你有100个头文件都#import了同一个头文件,或者这些文件是依次被引用的,如A–>B, B–>C, C–>D这样的引用关系。当最开始的那个头文件有变化的话,后面所有引用它的类都需要重新编译,如果你的类有很多的话,这将耗费大量的时间。而是用@class则不会。
【2】如果有循环依赖关系,如:A–>B, B–>A这样的相互依赖关系,如果使用#import来相互包含,那么就会出现编译错误,如果使用@class在两个类的头文件中相互声明,则不会有编译错误出现。
所以,一般来说,@class是放在interface中的,只是为了在interface中引用这个类,把这个类作为一个类型来用的。 在实现这个接口的实现类中,如果需要引用这个类的实体变量或者方法之类的,还是需要import在@class中声明的类进来.
4. @interface
@interface是oc的类的基本组成部分,类的深入学将放到后面。
.m
#import "ViewController.h"
@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
1. @interface className()
这里的@interface className()是对类的扩展,里面声明的成员,是不能被外界访问的,也不能被子类所继承的。
2. @implementation
在@implementation中的方法是不能被继承和外界访问的。这里的-(void)viewDidLoad方法是实现父类用接口,而接口是被继承的,所以能够继承该方法。
以上有不足和有误的地方欢迎指出==。