当前位置: 首页 > 编程笔记 >

iOS开发中class和#import的区别介绍

南门欣怡
2023-03-14
本文向大家介绍iOS开发中class和#import的区别介绍,包括了iOS开发中class和#import的区别介绍的使用技巧和注意事项,需要的朋友参考一下

在iOS开发过程中,我们在一些源码中经常会看到导包的时候有的用#import进行导包,但是有的的时候也会看到用@class进行导包,那么这两种方式有什么区别呢?

一 @class和#import的主要区别

  首先说一下最主要的区别:

•使用#import引入一个类的头文件,编译时会将该类的头文件中的所有信息都引入,包含属性和方法;

•使用@class仅仅是告诉编译器这是一个类,并不会因入该类的其他信息,而我们所关心的也仅此一点,而不需要知道该类的内部有哪些属性和方法,因此使用@class可以提升编译性能

二 @class的应用场景

@class的应用场景主要有两种:

•一般情况下,我们在.h头文件中使用@class,可以以提升编译性能;而在.m实现文件中,往往就需要知道类的内部信息了,这时就需使用#import来引入这些信息;在iOS的很多源文件的.h文件中很多都采用@class的方式进行导包,例如在UIView.h文件中就有如下这样的代码:

@class UIBezierPath, UIEvent, UIWindow, UIViewController, UIColor, UIGestureRecognizer, UIMotionEffect, CALayer, UILayoutGuide;

•为了避免两个类之间循环引用,我们在某一个类的.h文件中用@class进行导入

  下面着重说一下第二种场景,对于循环依赖关系来说,比方A类引用B类,同时B类也引用A类,例如下面这种情况,我们都用#import进行这种嵌套引用的代码在编译时是会报错。

//A.h文件
#import "B.h"
@interface A : NSObject
@property (strong, nonatomic) B *_b;
@end
//B.h文件
#import “A.h"
@interface B : NSObject
@property (strong, nonatomic) A *_a;
@end

为了解决这个问题,我们可以采用@class的方式进行引用,一个用#import一个用@class,或者两个都用@class都可以避免报错。

//A.h文件
@class B
@interface A : NSObject
@property (strong, nonatomic) B *_b;
@end
//B.h文件
@class A
@interface B : NSObject
@property (strong, nonatomic) A *_a;
@end

总结

以上所述是小编给大家介绍的iOS开发中class和#import的区别介绍,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

 类似资料:
  • 本文向大家介绍Python import与from import使用及区别介绍,包括了Python import与from import使用及区别介绍的使用技巧和注意事项,需要的朋友参考一下 下面介绍下Python import与from import使用,具体内容如下所示: Python程序可以调用一组基本的函数(即内建函数),比如print()、input()和len()等函数。Python本

  • C++ 中保留了C语言的 struct 关键字,并且加以扩充。在C语言中,struct 只能包含成员变量,不能包含成员函数。而在C++中,struct 类似于 class,既可以包含成员变量,又可以包含成员函数。 C++中的 struct 和 class 基本是通用的,唯有几个细节不同: 使用 class 时,类中的成员默认都是 private 属性的;而使用 struct 时,结构体中的成员默认

  • 问题内容: 我正在学习一些CSS来调整我的项目模板。我遇到了这个问题,但在网络上找不到明确的答案。在CSS中使用@import或link有区别吗? 使用@import 链接的使用 最好的方法是什么?为什么?谢谢! 问题答案: 从理论上讲,它们之间的唯一区别是CSS机制包含样式表和HTML机制。但是,浏览器对它们的处理方式不同,因此在性能方面具有明显的优势。 史蒂夫Souders的写了大量的博客文章

  • 本文向大家介绍require和import有什么区别?相关面试题,主要包含被问及require和import有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 1.CommonJS 还是 ES6 Module 输出都可以看成是一个具备多个属性或者方法的对象;default 是 ES6 Module 所独有的关键字 2.export default fs 输出默认的接口对象,import fs

  • 本文向大家介绍iOS 类(class)和结构体(struct)有什么区别?相关面试题,主要包含被问及iOS 类(class)和结构体(struct)有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 先了解一下什么叫类? 类(Class)是面向对象程序设计实现信息封装的基础。类是一种用户定义类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。类是面向对象程序设

  • 谁能告诉我Rsrc-class-Path和runnable-jar的清单文件的Class-Path部分之间有什么区别? 现在我认为它们是Eclipse生成的,但我想了解它是如何工作的。 根据Eclipse生成代码的方式,我认为第一个是关于我的应用程序需要的JAR,第二个总是