#import,#include与@class的区别
1.
#include是C中用来引用文件的关键字,而#import是obj-c中用来代替include的关键字。#import可以确保同一个文件只能被导入一次,从而避免了使用#include容易引起的重复引用问题,即classA引用了classC,classB也引用了classC,而当classD同时引用classA,classB的时候就会报重复引用的错误。
2.
#import""与#import<>:#import""实现从当前工作目录中找要导入的文件,如果没有再到系统类库中找,而#import<>是直接从系统类库中找要导入的文件。
3.
#import与@class:
@class只是告诉编译器,后面遇到的这个名称是一个类名称,至于这个类是如何实现的暂不用考虑。引入@class主要是用来解决引用死锁--如果两个类存在循环依赖关系,即A->B,B->A,如果用#import来相互包含,就会出现编译错误:
Expected specifier-qualifier-list before ‘A’或者Expected specifier-qualifier-list before ‘B’。
一般情况下,在 .h文件中,只需要知道类的名字就可以了,所以用@class,而在 .m文件中通常需要知道类的成员变量即方法,所以要用#import来将类文件导进来。
那为什么不在 .h文件中直接用#import来将类文件导入呢,因为如果导入大量的头文件,编译器就会花大量的时间来编译。
需要在 .h文件中用#import的情况:
1/如果有继承关系的要用#import,如,A继承B,需要在A中将B import进来。
2/使用有category的类,需要在 .h文件中用#import将该类的category导进来。
#import,#include与@class的区别的更多相关文章
- #include #import @class 的一些用法区别
从网上查了一些资料,整理了一下,发现很多都说的比较详尽,下面摘录自网络 说一下#import同class之间的区别 在ios中我们经常会在.h和.m中引入一些类啊等等一般用的是#import来进行声明 ...
- 转发(request.setRequestDispacter)和重定向(response.sendRedirect)的区别以及转发的include和forward的区别
//response 重定向的时候,url是会跳转到新的页面的,输入的地址要包含项目名(可以跳到项目之外的页面,比如百度)//request 请求转发的时候,url是不会跳转到新页面的,输入的地址不包 ...
- iOS 中 #import同@class之间的区别
很多刚开始学习iOS开发的同学可能在看别人的代码的时候会发现有部分#import操作写在m文件中,而h文件仅仅使用@class进行声明,不禁纳闷起来,为什么不直接把#import放到h文件中呢? 这是 ...
- iOS中@class #import #include 简介
[转载自:http://blog.csdn.net/chengwuli125/article/details/9705315] 一.解析 很多刚开始学习iOS开发的同学可能在看别人的代码 ...
- [转] iOS中@class #import #include 简介
[转载自:http://blog.csdn.net/chengwuli125/article/details/9705315] 一.解析 很多刚开始学习iOS开发的同学可能在看别人的代码 ...
- php中include()和require()的区别
1.引用文件方式 对 include()来说,在include()执行时文件每次都要进行读取和评估:而对于require()来说,文件只处理一次(实际上,文件内容替换 了require()语句.这就意 ...
- [转]require(),include(),require_once()和include_once()区别
require(),include(),require_once()和include_once()区别 面试中最容易提到的一个PHP的问题,我想和大家共勉一下: require()和include() ...
- 关于require,require_once,include和include_once的区别
一.定义 require,require_once,include,include_once都属于PHP的关键字,也就是说它们实际都是PHP的语句,而不是函数,类似于print,echo一样,也是PH ...
- PHP中include和require的区别
include和require的区别,其实两者没有太大的区别,如果要包含的文件不存在,include提示notice,然后继续执行下面的语句,require提示致命错误并且退出. 根据测试,win32 ...
随机推荐
- php object
一.访问控制 <?php class Computer{ public $cpu = 880; private $name = 'xiaomi'; public function getname ...
- Message相关函数对比
SendMessage PostMessage 过程类型 同步过程:等待其他程序处理消息完了之后才返回,继续执行 异步过程:只把消息放入队列,不管其他程序是否处理都返回,然后继续执行 返回值 表 ...
- 学习旧岛小程序 (5) observer 函数中修改属性的值
不要在一个属性的 observer 函数中修改属性的值 不然会造成内存泄露 错误代码: properties: { /* 期刊号 */ index: { type: String, observer ...
- SpringBoot---事务支持
1.自动配置的事务管理器 1.1.使用JDBC 作为 数据访问技术 时,SpringBoot 为我们 定义了 PlatformTransactionManager的实现 DataSourc ...
- Object and Collection Initializers (C# Programming Guide) 类初始化
public class Cat { // Auto-implemented properties. public int Age { get; set; } public string Name { ...
- php strcspn()函数 语法
php strcspn()函数 语法 作用:输出在字符串中找到某字符之前查找的字符数.直线电机参数 语法:strcspn(string,char,start,length) 参数: 参数 描述 str ...
- Axios 安卓4.4不兼容的问题
问题:Vue在使用Axios做接口请求时,如果是安卓4.4系统会发生报错,原因是安卓4.4不支持ES6的Promise语法 解决方案: 1.安装: npm install babel-polyfill ...
- BZOJ 3930: [CQOI2015]选数 莫比乌斯反演 + 杜教筛
求 $\sum_{i=L}^{R}\sum_{i'=L}^{R}....[gcd_{i=1}^{n}(i)==k]$ $\Rightarrow \sum_{i=\frac{L}{k}}^{\fra ...
- [CF846C]Four Segments题解
我们暴力枚举一下\(delim_{1}\) 然后对于每个\(delim_{1}\),O(n)扫一遍+前缀和求出最大\(delim_{0}\)和\(delim_{2}\),然后记录一下它们的位置就行啦 ...
- 攻防世界 | CGfsb
所以题目要求是输入生日1926l