文档章节

OC之@class

feng_blog
 feng_blog
发布于 2015/08/31 15:35
字数 536
阅读 31
收藏 0

假设有两个类,一个是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方式引用被引用类。


版权声明:本文为博主原创文章,未经博主允许不得转载。

© 著作权归作者所有

feng_blog

feng_blog

粉丝 119
博文 130
码字总数 105422
作品 3
朝阳
iOS工程师
私信 提问
从 OC 到 Swift 的快速入门与专业实践

只会介绍与 OC 有明显区别的地方,不会介绍 OC 中没有的,比如元组。当前总结也只是蜻蜓点水而已,但是有 OC 的基础,看这些已经足够。 一、数据 Swift 是类型安全的语言: Swift 必须明确数...

CoderHG
2018/08/04
0
0
AppCode 3.1.2 更新,Objective-C 的集成开发环境

AppCode 3.1.2 更新,包括大量的 Swift bug 修复,可以直接从 IDE 更新,也可以在这里下载。 详细 Swift 相关 bug 修复: New class/file wizard is available for Swift now (): We procee...

oschina
2015/01/17
1K
5
【OC底层】OC对象本质,如 isa, super-class

Objective-C的本质 1、我们编写的Objective-C,底层现实都是C/C++,代码生成步骤如下: 2、在OC中的所有面向对象的实现,都是基于C/C++的数据结构实现的 3、将Objective-C代码转换为CC++代码...

这酸爽!
2018/09/28
0
0
2、OC —— 类的创建与实例化

一、OC类的简述 1、OC类分为2个文件:.h文件用于类的声明,.m文件用于实现.h的函数; 2、类是声明使用关键字:@interface、@end ; 3、类是实现使用关键字:@implementation、@end ; 二、创...

cobish
2014/03/19
3K
0
swift的数据类型到底是什么尿性 (说点别人没讲明白的)

文初: 如果你对swift的些许了解只局限在 swift中的类型使用struct取代class 多了Optional可选类型 这些最基础的认知,而对其底层设计的原因和原理了解甚少,那这篇文章会给你新的视角,让你...

CoderDancer
2017/08/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
5
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部