Obj-C中的@class
2015-07-20 10:06
127 查看
在《Objective-C 基础教程》中有写到,为了减少由依赖关系引起的重新编译所带的影响,Objective-C引入了关键字@class来告诉编译器:“相信我,以后你会知道这个类到底是什么,但是现在,你只需要知道这些。”
它并不需要知道关于这个类的更多信息,只要了解它是通过指针引用即可。
如下例所视:
为什么要用@class Tire;和@class Engine;呢?
如果此处用#import来导入Tire.h和Engine.h的话,编译器会获得这两个类的大量信息,上例中,只是通过指针引用了Tire和Engine。这是@Class可以完成的工作。
如果有循环依赖关系,@class也很有用,即,A类使用B类,B类也使用A类。如果试图通过#import语句让这两个类相互引用,那么最后就会出现编译错误,但是如果在A.h中使用@classB,在B.h中使用@classA,那么这两个类就可以相互引用了。
这样做的好处是:会减少#import带来的变异错误,并且速度也快
它并不需要知道关于这个类的更多信息,只要了解它是通过指针引用即可。
如下例所视:
#import @class Tire; @class Engine; @interface Car : NSObject { Tire *tires[4]; Engine *engine; } - (void) setEngine: (Engine *) newEngine; - (Engine *) engine; - (void) setTire: (Tire *) tire atIndex: (int) index; - (Tire *) tireAtIndex: (int) index; - (void) print; @end // Car
为什么要用@class Tire;和@class Engine;呢?
如果此处用#import来导入Tire.h和Engine.h的话,编译器会获得这两个类的大量信息,上例中,只是通过指针引用了Tire和Engine。这是@Class可以完成的工作。
如果有循环依赖关系,@class也很有用,即,A类使用B类,B类也使用A类。如果试图通过#import语句让这两个类相互引用,那么最后就会出现编译错误,但是如果在A.h中使用@classB,在B.h中使用@classA,那么这两个类就可以相互引用了。
这样做的好处是:会减少#import带来的变异错误,并且速度也快
相关文章推荐
- JDK的组成:Client Hotspot VM 与Server Hotspot VM 的区别 ???
- POJ 1486 (2分匹配 必须变判断)
- 【memcache/redis】memcache常见问题汇总
- poj 2352
- spring 测试
- java定时器Timer,TimerTask每隔一段时间随机生成数字
- WPF 浏览器程序 证书制作与客户端自动下载安装
- json字符串转为字典
- ctrl+2+L-我在编码中经常使用到的快捷键
- Java程序员面试题收集(4)
- Java程序员面试题收集(5)
- Oracle 11g R2 x64无法使用sql developer的解决方案
- 开发环境简介合集
- js 获取json对象的Key、value
- javascript单例模式的理解
- Java程序员面试题收集(3)
- kissy学习
- SSH框架中经典错误:java.lang.NoSuchMethodError: antlr.collections.AST.getLine()解决方案
- Linux加密类型及相关算法
- 步步为营(三)贪心(2)选择不相交区间