1.引用一个类的两种办法

@class:如果你只是定义成员变量、属性

#import:如果是继承某个类

2.两种方法的区别

#import方式会包含被引用类的所有信息,包括被引用类的变量和方法;

  1. #import<Foundation/Foundation.h>
  2. //#import "Book.h"类似
  3. @interface Book : NSObject
  4. @end
  5. @interface Student : NSObject
  6. {
  7. Book *_book;
  8. }
  9. @property Book*book;
  10. @end

@class方式只是告诉编译器在A.h文件中,B*b只是类的声明,具体这个类有什么信息,这里不需要知道。等实现文件中真正需要的时候,才会真正查看B类中的信息。

3.正确使用方法

Student.h文件:

  1. //import<Foundation/Foundation.h>是为了知道Foundation框架有什么成员,和方法,避免重复定义等。
  2. #import<Foundation/Foundation.h>
  3. //声明的时候告诉是个类
  4. @class Book;
  5. @interface Student : NSObject
  6. {
  7. Book *_book;
  8. }
  9. @property Book*book;
  10. @end

Student.m文件:

//使用的时候,在告诉有什么成员和方法

  1. #import "Book.h"
  2. @implement Student
  3. {
  4. … …
  5. }
  6. @end

4.@class方式

使用@class方式由于只需要知道被引用类(B类)的名称就可以了,而在实现类由于要用到被引用类中的实体变量和方法,所以在.m文件中需要使用#import来包含引用类的头文件。

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

当出现循环依赖干系的时候,#import会报错。

A.h文件

  1. #import "B.h"
  2. @interface A : NSObject
  3. {
  4. B *b;
  5. }
  6. @end

B.h文件

  1. #import"A.h"
  2. @interface B : NSObject
  3. {
  4. A *a;
  5. }
  6. @end
 

OC @class关键字的更多相关文章

  1. OC基础--关键字@property 和 @synthesize

    一.@property关键字需要掌握的知识: 1.用在@interface中,用来自动生成setter和getter的声明 例:@property int age;--相当于执行了右边的代码--> ...

  2. OC 属性关键字

    // 属性关键字 /* 1.ARC下(自动管理内存,自动引用计数)(IOS) strong,weak ----------------------------------------- 2.MRC下( ...

  3. oc const 关键字 对指针的理解

    /* int const *p; *p是常量, p是变量 const int *p; *p是常量, p是变量 int * const p; *p是变量, p是常量 const int * const ...

  4. OC KVC

    OC KVC KVC 全称 key valued coding 键值编码 在说KVC之前应该简单的了解一下反射机制 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法. 对于任意 ...

  5. 02第一个OC程序

    一.打开XCode4.6.3,新建项目 二.选择Application下的命名行项目 三.输入项目名称,选择Foundation框架创建项目,点击Next 四.二话不说.点击Run.启动我们创建的项目 ...

  6. iOS 阶段学习第11天笔记(OC基础知识)

    iOS学习(OC语言)知识点整理 一.OC基础知识 1)#import  用于导入头文件,预处理阶段加载引用,只加载一次. 2)OC 依赖于Foundation框架下的头文件Foundation.h, ...

  7. (转载)OC学习篇之---概述

    前言 终于开启了OC的学习篇了,之前由于工作上的事,学习就一直搁浅了,不过最近由于各种原因,感觉必须要开启iOS的开发旅程了,不然就老了.因为之前一直是做Android的,所以学习iOS来就没那么费劲 ...

  8. OC基础-第1天

    #pragma mark - Day01_01_OC语言的历史(了解) 1) Objective - C 是一门面向对象的高级语言 2) Objective - C 简称 obj - C  \  OC ...

  9. OC之OC与C的比较

    1. 从编写.编译.链接的流程. 1). 创建1个.m的源文件. 2). 在这个文件中写上符合OC语法规范的源代码. 3). 编译. a. 预编译: 执行预处理代码. b. 检查语法. c. 生成目标 ...

随机推荐

  1. 502 bad gateway,ngix

    1.ftm对nginx的解析出现问题:20171228

  2. 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记8——载入三维模型&Alpha混合技术&深度测试与Z缓存

    第17章 三维游戏模型的载入 主要是如何从3ds max中导出.X文件,以及如何从X文件加载三维模型到DirextX游戏程序里.因为复杂的3D物体,要用代码去实现,那太反人类了,所以我们需要一些建模软 ...

  3. hdu 3078(LCA的在线算法)

    Network Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  4. Eclipse的工程名有红色的感叹号,工程里面没有显示编译错误

    在导入其他人或配套光盘中的工程时,经常会出现这种错误. 问题的原因: 通常是JRE的版本不同造成的. 解决的办法: 是选择工程名,然后通过在右键菜单中选择build path->configue ...

  5. 限制输入字符个数的jq插件

    (function($) { $.fn.extend( { limiter: function(limit, elem) { $(this).on("keyup focus", f ...

  6. OpenStack 安装数据库和rabbitmq消息队列 (三)

    一)安装配置数据库 1.1.安装包 # yum install mariadb mariadb-server python2-PyMySQL -y 1.2.配置数据库 # vim /etc/my.cn ...

  7. Druid数据迁移小计

    Druid数据迁移小计 Druid 官方网站上讲了相关的 Dump Segment 和 Insert Segment 相关的功能,但是经过测试这些功能都不好用,报 Guice 的依赖错误,懒得找具体原 ...

  8. Java网络编程一

    1.InetAddress的应用 import java.util.List; import java.math.BigDecimal; import java.net.InetAddress; im ...

  9. Java实现打包下载BLOB字段中的文件

    概述 web项目的文件打包下载实现:servlet接收请求,spring工具类访问数据库及简化大字段内容获取,org.apache.tools.zip打包. 必要提醒:当前总结是继Java实现下载BL ...

  10. 洛谷——P1869 愚蠢的组合数

    P1869 愚蠢的组合数 题目描述 最近老师教了狗狗怎么算组合数,狗狗又想到了一个问题... 狗狗定义C(N,K)表示从N个元素中不重复地选取K个元素的方案数. 狗狗想知道的是C(N,K)的奇偶性. ...