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

所属分类: 软件编程 / IOS 阅读数: 1983
收藏 0 赞 0 分享

关于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 App中UILabel的自定义及在Auto Layout中的使用

这篇文章主要介绍了iOS App中UILabel的自定义及在Auto Layout中的使用,示例代码为传统的Objective-C语言,需要的朋友可以参考下
收藏 0 赞 0 分享

iOS应用开发中UITableView的分割线的一些设置技巧

这篇文章主要介绍了iOS应用开发中UITableView分割线的一些设置技巧,包括消除分割线的方法,示例代码为传统的Objective-C语言,需要的朋友可以参考下
收藏 0 赞 0 分享

详解iOS时间选择框

这篇文章主要为大家详细介绍了详解iOS时间选择框,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

详解iOS App开发中UIViewController的loadView方法使用

这篇文章主要介绍了详解iOS App开发中UIViewController的loadView方法使用,讲解了访问view属性时loadView方法的调用及使用loadView时的一些注意点,需要的朋友可以参考下
收藏 0 赞 0 分享

详解在iOS App中自定义和隐藏状态栏的方法

这篇文章主要介绍了在iOS App中自定义和隐藏状态栏的方法,在顶部时某些状况下即用应用内的状态栏覆盖系统本身的,代码示例为Objective-C语言,需要的朋友可以参考下
收藏 0 赞 0 分享

iOS开发实现音频播放功能

本文给大家分享的是在IOS开发过程中实现音频播放的功能,讲解的十分细致,有需要的小伙伴可以参考下
收藏 0 赞 0 分享

IOS开发实现录音功能

本文给大家分享的是一个IOS开发中实现录音功能的实例,并简单给大家解析一下,有需要的小伙伴可以参考下
收藏 0 赞 0 分享

iOS实现图片轮播效果

这篇文章主要为大家详细介绍了IOS实现图片轮播效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

iOS通过http post上传图片

这篇文章主要介绍了iOS通过http post上传图片的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

IOS框架Spring常用的动画效果

本文给大家介绍的是在IOS开发中常用的动画效果以及自定义转场动画特效的代码,非常的简单实用,有需要的小伙伴可以参考下
收藏 0 赞 0 分享
查看更多