全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

浅谈iOS关于头文件的导入问题

关于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小时内与您取得联系。