@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. unity3d中布娃娃系统

    原地址:http://blog.csdn.net/pizi0475/article/details/9771941 转自: http://forum.mirax.com.tw/unity/viewto ...

  2. JAVA中的Session和Cookie【转】

    一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于才服务器端保持状态的 ...

  3. 一个简单的python爬虫(转)

    # -*- coding: utf-8 -*- #--------------------------------------- # 程序:百度贴吧爬虫 # 版本:0.1 # 作者:why # 日期: ...

  4. RCC 2014 Warmup (Div. 2) A~C

    近期CF的pretext真是一场比一场弱.第一次在CF上被卡cin.cout.... A. Elimination time limit per test 1 second memory limit ...

  5. docker中批量删除 tag为none的镜像

    添加定时任务,批量删除tag 为none 的镜像  ,释放磁盘空间 [root@weifeng]:~# crontab -l */ * * * /usr/bin/docker rmi `docker ...

  6. Android Shell Cmd

    1. view android version: grep ro.build.version.sdk= system/build.prop getprop ro.build.version.relea ...

  7. 【VBA研究】利用DateAdd函数取上月或上年同期的日期

    作者:iamlaosong DateAdd函数返回一个日期.这一日期加上了一个时间间隔.通过这个函数能够计算非常多我们须要的日期,比方上月上年同期日期等. 语法 DateAdd(interval, n ...

  8. 当 ftp 遇上 http Proxy

    在asp.net 开发中,有时需要使用到ftp 上传文件, 如果客户电脑使用http proxy 上网, 那么,客户电脑在使用ftp上传文件时,可能会出现以下错误: 使用 HTTP Proxy 時,不 ...

  9. poj 3017 Cut the Sequence(单调队列优化 )

    题目链接:http://poj.org/problem?id=3017 题意:给你一个长度为n的数列,要求把这个数列划分为任意块,每块的元素和小于m,使得所有块的最大值的和最小 分析:这题很快就能想到 ...

  10. oracle中查看正在运行的并行进程

    select count(*) from v$px_process a where a.STATUS='IN USE';