iOS开发21-OC学习- #include、#import和@class,解决#import死循环
2015-11-06 18:44
477 查看
#include、#import和@class,解决#import死循环
1、#include
#include < >:引用系统文件,它用于对系统自带的头文件的引用,编译器会在系统文件目录下去查找该文件。# include " ":用户自定义的文件用双引号引用,编译器首先会在用户目录下查找,然后到安装目录下查找,最后在系统文件中查找。
在使用#include的时候要注意处理重复引用 :
类A 与 类B同时引用了类C,不做重复引用处理的时候在类D中同时引用类A,类B的话,编译会提示对类C重复引用的错误.
#ifndef _CLASSC_H//一般是文件名的大写,classC.h
#define _CLASSC_H
#include "ClassC.h"
#endif
分析:
当第一次包含ClassC.h时,由于没有定义_CLASSC_H,条件为真,这样就会包含(执行)#ifndef _CLASSC_H和 #endif之间的代码;
当第二次包含ClassC.h时,前面一次已经定义了_CLASSC_H,条件为假,#ifndef _CLASSC_H和 #endif之间的代码也就不会再次被包含,这样就避免了重定义了。
2、#import
在代码中使用两次#include同一个.h文件的时候会报错:#include相当于拷贝头文件中的声明内容,所以会报重复定义的错误。使用两次#import同一个.h文件的话,不会报错,因为#import会做一次判断,如果已经导入过一次这个.h文件就不会再次导入这个文件了。
#import 是oc导入头文件的关键字,#include是c/c++导入头文件的关键字,#import不会重复导入,不会引起交叉编译。
#import < >:引用系统文件,它用于对系统自带的头文件的引用,编译器会在系统文件目录下去查找该文件。
# import " ":用户自定义的文件用双引号引用,编译器首先会在用户目录下查找,如果找不到就到到安装目录中查找。
3、@class解决#import死循环
头文件循环引用:定义两个类,A和B
A.h
#import <Foundation/Foundation.h> #import "B.h" @interface A : NSObject @property(nonatomic,strong)B *b1; @end
A.m
#import "A.h" @implementation A @end
B.h
#import <Foundation/Foundation.h> #import "A.h" @interface B : NSObject @property(nonatomic,strong)A *a1; @end
B.m
#import "B.h" @implementation B @end
此时就会造成循环引用头文件的错误:
此时使用@class可以避免这个错误
改成如下:
A.h
#import <Foundation/Foundation.h> @class B; @interface A : NSObject @property(nonatomic,strong)B *b1; @end
A.m
#import "A.h" #import "B.h" @implementation A @end
B.h
#import <Foundation/Foundation.h> @class A; @interface B : NSObject @property(nonatomic,strong)A *a1; @end
B.m
#import "B.h" #import "A.h" @implementation B @end
#import 把头文件包含进来仅且一次,而@class不用,@class编译效率比#import 更高。
在头文件中, 一般只需要知道被引用的类的名称就可以了。 不需要知道其内部的实体变量和方法,所以在头文件中一般使用@class来声明这个名称是类的名称。
著作权声明:本文由http://my.csdn.net/Nathan1987_原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢
相关文章推荐
- ios控制器modal跳转
- iOS本地通知
- iOS获取应用程序信息,版本号,程序名等
- IOS基础分享
- ios程序打包成ipa包过程
- iOS Runtime详解之SEL,Class,id,IMP,_cmd,isa,method,Ivar
- iOS登陆选择主界面
- iOS简单的登陆界面代码
- iOS image 添加图片
- iOS 自动化测试之xcpretty简介
- IOS-24-iOS动态库与静态库的区别及原理
- iOS学习之Table View的简单使用(前辈写的哦,仅是收藏一下,好仔细啊,赞!)
- 属性 iOS笔记
- 属性 iOS笔记
- iOS——计算项目代码行数
- iOS开发20-iOS开发中要注意的循环引用
- iOS学习之CALayer
- 【iOS学习笔记 15-11-06】简单自定义navigationcontroller push和pop动画效果
- 我的iOS学习历程 - OC第九天
- 我的iOS学习历程 - OC第九天