黑马程序员--#import和@class的区别
2015-09-14 12:42
393 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1)#import方式会包含被引用类的所有信息,包括被引用类的变量和方法;@class方式只会告诉编译器在A.h文件中B *_b只是类的声明,具体这个类里有什么信息,这里是不知道的,等实现文件中真正要使用到的时候才会真正去查看B类中信息。
2)使用@class方式由于只需要被引用类(B类)的名称就可以了,而在实现类(.m)由于要用到被引用类中得实体变量,所以需要使用#import来包含被引用类的头文件。
3)通过上面2点也很容易知道在编译效率上,如果有上百个头文件都#import了同一个文件,或者这些文件一次被(A->B->C->D...),一旦最开始的头文件稍有改动,后面引用到这个文件的所有类都需要重新编译一遍,这样的效率也是可想而知的,而相对来说,使用@class方式就不会出现这样的问题了。
所以:我们实际开发中尽量在 .h 文件中使用 @class
A.h
@class B
@interface A
@property(nonatomic,retain) B *b;
@end
A.m
....
-(void)dealloc{
self.b = nil; //此处不能用 [ _b release];
[super dealloc];
}
#import "B.h"
....
-(void)dealloc{
[ _b release]; //此处可用
[super dealloc];
}
由上可知,@class是放在interface中的,只是在引用一个类,将这个类作为一个类型,在实现文件(.m)中,如果需要引用到被引用类的实体变量或者方法时,还是需要使用#import方式引入被引入类。
@class还可以解决两个类循环依赖的问题,即A类引用B类,同时B类引用A类。
1)#import方式会包含被引用类的所有信息,包括被引用类的变量和方法;@class方式只会告诉编译器在A.h文件中B *_b只是类的声明,具体这个类里有什么信息,这里是不知道的,等实现文件中真正要使用到的时候才会真正去查看B类中信息。
2)使用@class方式由于只需要被引用类(B类)的名称就可以了,而在实现类(.m)由于要用到被引用类中得实体变量,所以需要使用#import来包含被引用类的头文件。
3)通过上面2点也很容易知道在编译效率上,如果有上百个头文件都#import了同一个文件,或者这些文件一次被(A->B->C->D...),一旦最开始的头文件稍有改动,后面引用到这个文件的所有类都需要重新编译一遍,这样的效率也是可想而知的,而相对来说,使用@class方式就不会出现这样的问题了。
所以:我们实际开发中尽量在 .h 文件中使用 @class
A.h
@class B
@interface A
@property(nonatomic,retain) B *b;
@end
A.m
....
-(void)dealloc{
self.b = nil; //此处不能用 [ _b release];
[super dealloc];
}
#import "B.h"
....
-(void)dealloc{
[ _b release]; //此处可用
[super dealloc];
}
由上可知,@class是放在interface中的,只是在引用一个类,将这个类作为一个类型,在实现文件(.m)中,如果需要引用到被引用类的实体变量或者方法时,还是需要使用#import方式引入被引入类。
@class还可以解决两个类循环依赖的问题,即A类引用B类,同时B类引用A类。
相关文章推荐
- 百度面试题集锦
- 实习面试
- 最老程序员开发实训10--Android---应用介绍页面实现2
- 最全前端面试问题及答案总结
- 程序员的爱
- [ios学习]iOS架构师的职业发展方向
- leetcode面试准备:Add and Search Word - Data structure design
- 八大“刁难”面试问题
- 黑马程序员---Java基础---java语言基本组成
- leetcode面试准备:Reverse Words in a String
- 【面试】-百度外卖后端开发工程师
- 软件开发常见面试题
- 码农带你读《史记》
- 100+经典Java面试题及答案解析
- 我的程序员未婚夫
- 腾讯2016年9月14号面试笔试题
- 作为程序员,你最害怕的是什么?
- 程序员经常说的30句话,吐槽吧程序员!
- 一道博弈的面试题及其算法正确性证明
- 转自百度上一位大龄程序员的肺腑之言