oc 关于头文件声明 与前向声明
2015-08-13 20:02
204 查看
参照
http://blog.csdn.net/jiangwei0910410003/article/details/41774747
1.#import和#include的区别
(当我们在代码中使用两次#include的时候会报错:因为#include相当于拷贝头文件中的声明内容,所以会报重复定义的错误
但是使用两次#import的话,不会报错,他会做一次判断,如果已经导入一次就不导入了)
#import本身有防止头文件被重复包含的功能,而#include需要借助于头文件预处理来防止被重复包含
两种都是把头文件中的声明内容拷贝进当前文件中
2.关于前向声明问题
有一个课程类Classes和学生类Student,他们两之间需要相互引用(导入)
(student.h中导入class。h,class。h中导入student。h)
问题是
OC中类的相互引用的问题,我们在Student.h文件中导入了Classes.h,又在Classes.h文件中导入了Student.h,OC中在相互导入的时候编译是不通过的
会提示找不到指定类型
解决方法
将#import "Student.h"代码注释了,使用
@class Student
这段代码的作用就是不会将Student.h文件拷贝过来,只是告诉编译器Student这个类在别的地方中有定义,这样就不知道这个类中的任何信息了(哪些属性和方法)
总结:
这一篇文章就介绍了#import关键字和@class的作用,特别是@class关键字的使用,为了解决相互导入的问题,在此回顾一下我们是怎么操作的:
Student类中的导入Classes.h方式不变,在Classes.h头文件中使用@class关键字引入Student类型,使其编译通过,然后在Classes.m文件中导入Student.h文件,使其运行通过
http://blog.csdn.net/jiangwei0910410003/article/details/41774747
1.#import和#include的区别
(当我们在代码中使用两次#include的时候会报错:因为#include相当于拷贝头文件中的声明内容,所以会报重复定义的错误
但是使用两次#import的话,不会报错,他会做一次判断,如果已经导入一次就不导入了)
#import本身有防止头文件被重复包含的功能,而#include需要借助于头文件预处理来防止被重复包含
两种都是把头文件中的声明内容拷贝进当前文件中
2.关于前向声明问题
有一个课程类Classes和学生类Student,他们两之间需要相互引用(导入)
(student.h中导入class。h,class。h中导入student。h)
问题是
OC中类的相互引用的问题,我们在Student.h文件中导入了Classes.h,又在Classes.h文件中导入了Student.h,OC中在相互导入的时候编译是不通过的
会提示找不到指定类型
解决方法
将#import "Student.h"代码注释了,使用
@class Student
这段代码的作用就是不会将Student.h文件拷贝过来,只是告诉编译器Student这个类在别的地方中有定义,这样就不知道这个类中的任何信息了(哪些属性和方法)
总结:
这一篇文章就介绍了#import关键字和@class的作用,特别是@class关键字的使用,为了解决相互导入的问题,在此回顾一下我们是怎么操作的:
Student类中的导入Classes.h方式不变,在Classes.h头文件中使用@class关键字引入Student类型,使其编译通过,然后在Classes.m文件中导入Student.h文件,使其运行通过
相关文章推荐
- UIControl和它的子类
- int型数据在内存中存储时1的个数
- 发送验证码倒计时
- php 处理上百万条的数据库如何提高处理查询速度
- 递推DP HDOJ 5389 Zero Escape
- HDU 5381 The sum of gcd
- 在字符串中找出连续最长的数字串 .
- 决策树之ID3、C4.5、C5.0等五大算法
- 又见01背包
- android 事件处理机制之requestDisallowInterceptTouchEvent
- Linux2.6.38内核启动流程分析
- hdu 1198Farm Irrigation
- 【华为机试题】亮着电灯的盏数
- Scala练习(十五)
- 第12章 文件管理
- IK Analyzer 2012FF_hf1使用
- HDU 题目分类 很有层级 感觉很好
- poj 1159 Palindrome
- poj 2349 Arctic Network
- java.lang.ClassNotFoundException: org.springframework.web.content.ContextLoaderListener