OC之@class
来源:互联网 发布:为什么不能下载java 编辑:程序博客网 时间:2024/05/16 05:40
假设有两个类,一个是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方式引用被引用类。
- OC之【@class】
- OC之@class
- OC学习之路:@class和#import的区别
- OC 基础之--- 多态,内存管理,@class和@ import
- NSString-OC+class
- NSMutableString-OC+class
- NSArray、NSMutableArray-OC+class
- NSDictionary,NSMUtableDictionary-OC+class
- NSSet、NSMutableSet-OC+class
- OC class override
- OC class self
- OC的NSPredicate Class
- oc中的class
- oc中Class是个啥
- OC中的Class类型和class方法
- Create class at OC runtime
- OC中@class的理解
- OC基础—内存管理之@property及其参数(补充新知识:循环引用和@class)
- osgi8——camel activitimq
- 使用Python的requests库作接口测试——对HPPT动词的支持
- 高级Socket编程——阻塞与非阻塞模式Socket编程
- 图片缓存库Picasso和ImageLoader的使用
- 使用axis2配置webservice服务
- OC之@class
- hadoop2.x编译(三)
- 利用Amazon Mobile Analytics与R深入探究移动应用的使用模式
- 音频编码
- 正则表达式校验及实例
- Activity生命周期的简单了解
- 16. jQuery - 获取并设置 CSS 类
- dedecms的文章和栏目的自定义字段的添加、调用以及完全删除方法
- uboot向kernel的传参机制bootm与tags