深入理解Objective-c中class的含义.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
深入理解Objective-c中class的含义

深入理解Objective-c中@class的含义在objective-c中,经常会遇到一个类使用另一个类,并且在类的头文件中需要创建被引用类的指针。如下面的代码:A.h文件其中,A类是引用类,B类是被引用类,在这暂不考虑的实现文件。通常引用一个类有两种方法:一种是通过#import方式引入;另一种是 通过@class方式引入。这两种方式的区别在于:1、#import方式会包含被引用类的所有信息,包括被引用类的变量和方法;而@class方式只是告诉编译器在A.h文件中B *b只是类的声明,具体这个类里面有什么信息,这里不需要知道,等实现文件中真正要用到时,才会真正的去查看B类中的信息;2、使用@class方式由于只需要被引用类(B类)的名称就可以了,而在实现类中由于要用到被引用类中的实体变量和方法,所以需要使用#import来包含被引用类的头文件;3、通过上面两点好我们也很容易知道这个两个方式在编译效率上的差异,如果有上百个文件都#import了同一个文件,或者这些文件依次被#import(A-B,B-C,C-D...),一旦最开始的头文件稍有改动,后面引用到这个文件的所有类都需要重新编译一遍,,而相对来讲,使用@class方式就不会出现这种问题了;4、对于循环依赖关系来说,比如A类引用B类,让同时B类也引用A类,B类代码:B.h文件当系统运行时,编译会报错:当使用@class在两个类中相互声明就不会出现编译报错。结论:由上可知,@class是放在interface中,只是在引用一个类,将这个被引用类作为一个类型;在实现文件中,如果需要引用到被引用类的实体变量或者方法时,还需要使用#import方式引入被引用类。如:举个例子说明一下:在ClassA.h中#import ClassB.h 相当于#include整个.h头文件。如果有很多.m文件#import ClassA.h,那么编译的时候这些文件也会#import ClassB.h 增加了没必要的#import,浪费了编译时间。在大兴软件项目中,减少.h文件中的#include是非常重要的。如果只是ClassB那就没有#include ClassB.h ,仅需要在需要用到的ClassB的.m文件中#import ClassB.h。那么什么时候可以用呢?如果ClassA.h中仅需要声明一个ClassB的指针,那么就可以在ClassA.h中声明:@classB...ClassB *pointer;所以,一般来说,@class是放在interface中的,只是为了在interface中引用这个类,把这个类作为一个类型来用的。在实现这个借口的实现类中,如果需要引用这个类的实体变量或者方法之类的,还是需要#import在@class中声明的类进来。

文档评论(0)

liudao + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档