【OC语法】#import和#include的区别
来源:互联网 发布:数据库update语法 编辑:程序博客网 时间:2024/05/17 06:54
一、#import和#include的区别
当我们在代码中使用两次#include的时候会报错:因为#include相当于拷贝头文件中的声明内容,所以会报重复定义的错误
但是使用两次#import的话,不会报错,所以他可以解决重复导入的问题,他会做一次判断,如果已经导入一次就不导入了
二、关键字@class的作用
在来看一下OC中的关键字@class的作用,在看他的作用之前,先来看一个问题:
现在有一个课程类Classes和学生类Student,他们两之间需要相互引用(导入)。直接看代码比较直接:
Classes.h
导入Student.h头文件Classes.m
Student.h
同样的也导入Classes.h头文件Student.m
在来看一下测试代码:
main.m
这里有一个问题注意一下:我们看到了这里是如何使用Classes中的属性_student的,因为在Classes类中属性_student是@public的,所以可以直接使用,用的是箭头符号,和C/C++中的指针变量调用差不多。记住了,这里就说到了如何直接访问一个类中的@public修饰符的属性变量我们编译运行:
看到了,编译错误,说在Student类中的Classes类找不到指定类型,这就奇怪了,我们不是导入了Classes.h文件了,为什么还是找不到类型呢?
这就是OC中类的相互引用的问题,我们在Student.h文件中导入了Classes.h,又在Classes.h文件中导入了Student.h,OC中在相互导入的时候编译是不通过的
这样就会导致错误。
当然解决办法就是使用@class关键字,我们修改一下Classes类
Classes.h
我们将#import "Student.h"代码注释了,使用
@class Student
这段代码的作用就是不会将Student.h文件拷贝过来,只是告诉编译器Student这个类在别的地方中有定义,这样就不知道这个类中的任何信息了(哪些属性和方法)
Classes.m
然后在Classes.m文件中导入#import "Student.h"文件,这时候编译就不会报错了,同样就可以正常的运行了:
总结
这一篇文章就介绍了#import关键字和@class的作用,特别是@class关键字的使用,为了解决相互导入的问题,在此回顾一下我们是怎么操作的:
Student类中的导入Classes.h方式不变,在Classes.h头文件中使用@class关键字引入Student类型,使其编译通过,然后在Classes.m文件中导入Student.h文件,使其运行通过。
以后遇到这样的问题解决方法就是这样操作的。
- 【OC语法】#import和#include的区别
- iOS笔记--oc语法3 (#include和#import的区别、#import和@class的区别)
- OC-import和include的区别?
- oc中import和include的区别
- oc语言中 import 和 include 的区别
- OC#import和#include的异同
- include和import的区别
- #import 和 #include 的区别
- #import和#include的区别
- #import 和 #include 的区别 #import <> 和 #import ""的区别
- OC学习篇之---@class关键字的作用以及#include和#import的区别
- OC学习篇之---@class关键字的作用以及#include和#import的区别
- OC学习篇之---@class关键字的作用以及#include和#import的区别
- 小糖出品:oc中#import和#include之间的区别
- 总结:#import和#include区别 #import和@class的区别 #import<>和#import""的区别
- #import和#include区别 #import和@class的区别 #import<>和#import""的区别
- #include和 #import区别
- #import和#include区别
- android点击home键后,点击图标,重新启动第一个activity
- 机器学习(6)——从线性回归到逻辑斯特回归
- Cannot send session cache limiter
- 开机检查是否更换sim卡
- javaScript window对象
- 【OC语法】#import和#include的区别
- java程序员第六课DOM&XML
- 8方法
- android binder机制
- spark分布式数据集操作
- HBase基本操作
- java - final关键字
- 虚拟机安装samba phpstorm
- Java Servlet的配置文件web.xml配置内容和具体含义