@class和#import相似。

1.@class用于 forward-class declaration,只能使用@class,

@class class2

@interface class1
{
class2* class2Object;
} @end @interface class2
{
class1* class1Object;
}
@end

2.

class1.h中引入class2.h头文件

#import "class2.h"
@interface class1
{
class2* class2Object;
} @end

class2.h中引入class1.h头文件

#import "class1.h"
@interface class2
{
class1* class1Object;
}
@end

这种情况会导致引用死锁,所以应该用forward-class declaration,即@class,如下

class1.h

@class class2;
@interface class1
{
class2* class2Object;
} @end

class2.h

@class class1;
@interface class2
{
class1* class1Object;
}
@end

总结,@class class1只是告诉编译器,class1是一个类,你不要以为class1是个未声明的野种,除此之外,没了。

但是 #import "class1.h"会告诉编译器,class1这个类中有什么东西,即class1.h中包含的函数和变量。

所以.h中使用@class绰绰有余,若你有需要创建或访问class1中的函数和变量,则必须使用#import。

最后给个常见的例子

@class A;

@protocol MyDelegate <NSObject>
- (BOOL)f:(A *)a;
- (void)g:(A *)a;
@end @interface A : NSObject
@end

协议写在@interface前面,协议使用了类A,又不涉及A中的函数和变量,此时应当在协议前面写上@class A;,否则是会出错的。

iOS #import和@class 区别的更多相关文章

  1. module.exports,exports,export和export default,import与require区别与联系【原创】

    还在为module.exports.exports.export和export default,import和require区别与联系发愁吗,这一篇基本就够了! 一.首先搞清楚一个基本问题: modu ...

  2. IOS跟ANDROID的区别

    大家总是会纠结哪个手机系统会更加适合自己,那就由小编我简要介绍一下IOS和安卓的区别吧! 运行机制:安卓是虚拟机运行机制,IOS是沙盒运行机制.这里再说明一下这两者的主要不同之处.安卓系统中应用程序的 ...

  3. Python import与from import使用及区别介绍

    Python程序可以调用一组基本的函数(即内建函数),比如print().input()和len()等函数.接下来通过本文给大家介绍Python import与from import使用及区别介绍,感 ...

  4. module.exports,exports,export和export default,import与require区别与联系

    还在为module.exports.exports.export和export default,import和require区别与联系发愁吗,这一篇基本就够了! 一.首先搞清楚一个基本问题: modu ...

  5. app测试中,ios和android的区别

    App测试中ios和Android的区别: 1. Android长按home键呼出应用列表和切换应用,然后右滑则终止应用: 2. 多分辨率测试,Android端20多种,ios较少: 3. 手机操作系 ...

  6. 通过ES6 Module看import和require区别

    前言 说到import和require,大家平时开发中一定不少见,尤其是需要前端工程化的项目现在都已经离不开node了,在node环境下这两者都是大量存在的,大体上来说他们都是为了实现JS代码的模块化 ...

  7. vue-resource对比axios import ... from和import {} from 的区别 element-ui

    1.vue-resource对比axios 文章1 文章2 1.0 axios  params 配置参数在url 显示,form-data 用于 图片上传.文件上传 1.1 axios 全局配置 ax ...

  8. iOS中的#import和class区别

    在ios中我们经常会在.h和.m中引入一些类啊等等一般用的是#import来进行声明,你们可能也见到在.h文件进用@class来声明的,那么#import和@class进行声明 到底有什么的区别呢?下 ...

  9. ios import和@class的区别

    二者的区别在于: 1.import会包含这个类的所有信息,包括实体变量和方法,而@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,暂时不用考虑,后面会再告诉你. 2.在头 ...

随机推荐

  1. [读后感]Java 控制台执行 Jar 传參的编码问题

    下面这版面,太让我纠结了.谁能帮调整一下,... _________________ java -jar test.jar "一二一" 这样传进去的 "一二一" ...

  2. BroadcastReceiver应用详解——广播

    转自:http://blog.csdn.net/liuhe688/article/details/6955668 BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收 ...

  3. Struts2拦截器浅析

    一.拦截器简介: Struts2大多数核心功能是通过拦截器实现的,每个拦截器完成某项功能. 拦截器方法在Action执行之前或者之后执行. 拦截器栈: 从结构上看,拦截器栈相当于多个拦截器的组合. 在 ...

  4. font-size<12 chrome不支持解决

    今天,群里有人问道font-size<12 chrome不支持的问题.说实话,这个我一直都没留意过,正好借个机会给自己补习一下. 自己亲自试过,确实如此,当font-size<12 chr ...

  5. javascript常量的定义

    例如可以使用 const PI = 3.14159265; 一般不推荐使用 const 关键字,因为它不是 ECMAScript 语法的一部分.当需要常量的时候一般是以命名习惯来约束的,亦即使用大写字 ...

  6. SVN服务器更改ip地址客户端怎么设置(转载)

    SVN 服务器 IP 地址修改后,客户端对服务器的连接可以采用以下的方法重定位: 1. 如果客户端工具是TortoiseSVN,直接在工作副本上右键,选择TortoiseSVN->relocat ...

  7. 小马哥课堂-统计学-t分布

    T distribution 定义 在概率论和统计学中,学生t-分布(t-distribution),可简称为t分布,用于根据小样本来估计 呈正态分布且方差未知的总体的均值.如果总体方差已知(例如在样 ...

  8. 小马哥课堂-统计学-z分数

    Standard score(z-分数) The standard score is the signed number of standard deviations by which the val ...

  9. Makefile 之 $(Q)

    # To put more focus on warnings, be less verbose as default # Use 'make V=1' to see the full command ...

  10. vue render函数 函数组件化

    之前创建的锚点标题组件是比较简单,没有管理或者监听任何传递给他的状态,也没有生命周期方法,它只是一个接受参数的函数 在这个例子中,我们标记组件为functional,这意味它是无状态(没有data), ...