关于import和@class的使用问题

一.@class的出现可以适当减少编译时间,提高效率。
现在假设有两个类,一个是Teacher类,一个是Students类。
Teacher类
#import <Foundation/Foundation.h> #import "Students.h" @interface Teacher : NSObject @property (copy,nonatomic)NSString *firstName; @property (copy,nonatomic)NSString *lastName; @property (strong,nonatomic)Students *student; @end
在类中声明三个属性,其中有一个属性为Students类属性。这时候既然使用到Students类,就需要导入该类的头文件。如如上代码。
注意:此时使用的是import导入的。这个方法可行但是不够优雅,存在一个问题,在声明文件中,我们不需要知道Students类的全部细节,只需要知道类名是Students就可以。如下使用@class解决问题,这叫“向前声明”该类。
Teacher.h
#import <Foundation/Foundation.h> @class Students; @interface Teacher : NSObject @property (copy,nonatomic)NSString *firstName; @property (copy,nonatomic)NSString *lastName; @property (strong,nonatomic)Students *student; @end
Teacher.m
#import "Teacher.h" #import "Students.h" @implementation Teacher @end
Teacher类的实现文件就需要知道Students类的全部借口细节,因此就需要在此时使用import “Students.h”。
将引入头文件的时机尽量延后,只有在确有需要的时候才引入,这样就可以减少类的使用者所需引入的头文件的数量。假如在.h文件的时候就是用import导入,就会引入很多不需要使用的内容,这必然会增加编译时间。
二.@class的出现也两个类互相引用的问题。
Teacher.h
#import <Foundation/Foundation.h> #import "Students.h" @interface Teacher : NSObject @property (copy,nonatomic)NSString *firstName; @property (copy,nonatomic)NSString *lastName; @property (strong,nonatomic)Students *student; @end
Students.h
#import <Foundation/Foundation.h> #import "Teacher.h" @interface Students : NSObject @property (strong,nonatomic)Teacher *teacher; @end
在Students类中import “Teacher.h”,同时在Teacher类中import “Students”类,这就造成了循环引用问题,程序在编译的时候就会出现无休止的编译。此时只需要将其中一个import改成@class即可,如果两者的.h文件都不需要知道对方类的全部借口细节,最佳方案是全部使用@class。
小结
除非确实有必要,就不要引入头文件。一般来说,在.h文件中应该使用向前声明来提及别的类,然后在.m文件引入那些类的头文件。这样做可以尽量降低类的耦合。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# ios导入头文件
# ios
# 自动导入头文件
# ios用AFN进行文件上传的示例代码
# Vue axios 中提交表单数据(含上传文件)
# Vue开发中整合axios的文件整理
# iOS利用AFNetworking实现文件上传的示例代码
# 简单谈谈C++ 头文件系列之(iosfwd)
# iOS利用AFNetworking3.0——实现文件断点下载
# 详解IOS中文件路径判断是文件还是文件夹
# 头文件
# 就会
# 类中
# 只需
# 要知道
# 的是
# 都不
# 不需要
# 所需
# 这就
# 这样做
# 就可
# 解决问题
# 有必要
# 确有
# 造成了
# 一个问题
# 要将
# 不需
# 其中一个
相关文章:
h5网站制作工具有哪些,h5页面制作工具有哪些?
建站之星与建站宝盒如何选择最佳方案?
如何安全更换建站之星模板并保留数据?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
宝塔新建站点为何无法访问?如何排查?
网站制作企业,网站的banner和导航栏是指什么?
建站之星微信建站一键生成小程序+多端营销系统
实现点击下箭头变上箭头来回切换的两种方法【推荐】
如何访问已购建站主机并解决登录问题?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
建站之星CMS建站配置指南:模板选择与SEO优化技巧
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
浅析上传头像示例及其注意事项
c# await 一个已经完成的Task会发生什么
桂林网站制作公司有哪些,桂林马拉松怎么报名?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
*服务器网站为何频现安全漏洞?
购物网站制作公司有哪些,哪个购物网站比较好?
如何制作算命网站,怎么注册算命网站?
如何通过老薛主机一键快速建站?
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
自助网站制作软件,个人如何自助建网站?
广州商城建站系统开发成本与周期如何控制?
建站之星安装后如何自定义网站颜色与字体?
c++怎么用jemalloc c++替换默认内存分配器【性能】
如何在云主机快速搭建网站站点?
如何在Windows虚拟主机上快速搭建网站?
制作农业网站的软件,比较好的农业网站推荐一下?
如何快速生成凡客建站的专业级图册?
学校免费自助建站系统:智能生成+拖拽设计+多端适配
高性价比服务器租赁——企业级配置与24小时运维服务
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
c# 在高并发场景下,委托和接口调用的性能对比
常州企业建站如何选择最佳模板?
建站之星代理平台如何选择最佳方案?
如何通过可视化优化提升建站效果?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
建站之星导航菜单设置与功能模块配置全攻略
如何高效配置IIS服务器搭建网站?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
如何零成本快速生成个人自助网站?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
香港网站服务器数量如何影响SEO优化效果?
沈阳制作网站公司排名,沈阳装饰协会官方网站?
广德云建站网站建设方案与建站流程优化指南
如何在IIS中新建站点并配置端口与物理路径?
如何将凡科建站内容保存为本地文件?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
建站之星如何实现五合一智能建站与营销推广?
广平建站公司哪家专业可靠?如何选择?
*请认真填写需求信息,我们会在24小时内与您取得联系。