您的位置:首页 > 移动开发 > Objective-C

OC之@class

2015-08-31 15:04 591 查看
假设有两个类,一个是Card,一个是Person,当Card中包含Person,我们就需要在Card前加上#import “Person.h“。如果此时Person中再包含Card的话,我们就又得在Person类前加上#import “Card.h”。这时再编译运行就会出现故障,因为编译运行会导致两个类不停得拷贝对方,导致报错。

这是可以在两个类前用:

@class 类

就可以避免这种问题,比如在Person中用@class Card;代替#import “Card.h”。在Card中用@class Person;代替#import “Person.h”。但是这样还是有一个问题,它仅仅告诉编译器某个名称是一个类,并没有把这个类中的所有东西拷贝过来。在实际开发中:

(1) 在.h文件中用@class来声明类

(2) 在.m文件中用#import来包含类的所有东西

@class和#import的区别(高频面试题):

对于循环依赖关系来说,比如A类引用B类,同时B类也引用A类:



这种代码会报错,当时用@class在两个类中互相声明,就不会编译报错。

(1)#import方式会包含被引用类的所有信息,包括被引用类的变量和方法;@class方式只是告诉编译器在A.h文件中B *b只是类的声明,具体这个类有什么信息,这里不需要知道,等实现文件中真正要用到时,才会去查看B类中信息。

(2)如果有上百个头文件都#import了同一个文件,或者这些文件依次被#import,那么一旦最开始的头文件稍有改动,后面引用这个文件的所有类都要重新编译一遍,这样对效率的影响也是可想而知的。相对来讲,使用@class方式就不会出现这种问题了。

(3)在.m实现文件中,如果需要引用到被引用类的尸体变量或者方法时,还需要使用#import方式引用被引用类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  objective-c ios OC class