您的位置:首页 > 职场人生

黑马程序员--#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类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: