objective-c中@class和#import

#import "B.h"

@interface A :NSObject

{

B *b;

}

@end

@class

通常引入一个类有两种方法。一种是#import方式引入,一种是通过@class引入

两种方式的差别

1  #import方式会包括被引用类的全部信息。包括被引用类的的变量和方法:@class方式仅仅是告诉编译器在A.h文件里B *b仅仅是类的声明。详细这个类有什么信息这里不须要知道,等文件里真正须要用到时。才会真正去查看B类中的信息。

2 使用@class方法因为仅仅须要知道被引用类(B类)的名称就能够了,而在实现类因为要用到被引用类中的实体变量和方法,所以在.m文件里须要使用@import来引用被引用的头文件。

3  假设有上百个头文件都#import

了同一个文件,或者这些文件一次呗#import,那么一旦最開始的头文件稍有修改,后面引用到这个文件的全部类都须要又一次编译一遍,这样效率会非常低。相对来讲,使用@class方式就不会出现这样的问题。

#import "A.h"

@interface B : NSObject

{

A *a;

}

@end

4  对于循环依赖关系来说。比喻说A类引用B类,同一时候B类也引用A类,当程序执行时,编译会报错。当使用@class在两个类相互声明,就不会出现编译报错。由上可知,@class是放在。

h中的,仅仅是在引用一个类,假设须要引用到被引用类的实体变量或者方法是。还须要使用#import方式引入被引用类。

objective-c中@class和#import的更多相关文章

  1. objective C中的字符串NSStirng常用操作

    objective C中的字符串操作 在OC中创建字符串时,一般不使用C的方法,因为C将字符串作为字符数组,所以在操作时会有很多不方便的地方,在Cocoa中NSString集成的一些方法,可以很方便的 ...

  2. Intellij Idea 工具在java文件中如何避免 import .*包

    Intellij Idea工具在java文件中怎么避免import java.utils.*这样的导入方式,不推崇导入*这样的做法!Editor->Code Style->Java-> ...

  3. 理解Objective C 中id

    什么是id,与void *的区别 id在Objective C中是一个类型,一个complier所认可的Objective C类型,跟void *是不一样的,比如一个 id userName, 和vo ...

  4. 浅谈Objective—C中的面向对象特性

    Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...

  5. JS ES6中export和import详解

    1.Export 模块是独立的文件,该文件内部的所有的变量外部都无法获取.如果希望获取某个变量,必须通过export输出, // profile.js export var firstName = ' ...

  6. JavaScript ES6中export、import与export default的用法和区别

    前言 相信很多人都使用过export.export default.import,然而它们到底有什么区别呢? 在看他们之间的区别之前,我们先来看看它们的用法. ES6 import和export的用法 ...

  7. python中:from * import 与 import 详解

    在python 中导入模块是我们最常用的功能,基本每个.py 文件中都会有 import 或者是 from * import 语句,可是,这两种方法有什么不同,有该怎么用?今天就好好分析一下. 先上定 ...

  8. vue2 中的 export import

    vue中组件的引用嵌套通过export import语法链接 Nodejs中的 export import P1.js export default { name: 'P1' } index.js i ...

  9. Objective C中的ARC的修饰符的使用---- 学习笔记九

    #import <Foundation/Foundation.h> @interface Test : NSObject /** * 默认的就是__strong,这里只是做示范,实际使用时 ...

随机推荐

  1. 【NOIP练习赛】开车

    [NOIP练习赛]T2.开车 Description 老司机小 Q 要在一个十字路口指挥车队开车,这个十字路口可 以描述为一个 n*n 的矩阵,其中第 2 行到第 n-1 行都各有一道横向车 道,第 ...

  2. C# Nugut CsvHelper 使用

    装载自: 跳转链接>>>

  3. Log4J2的 PatternLayout

    Log4J2 PatternLayout 参考 日志样例 : 2018-10-21 07:30:05,184 INFO - DeviceChannelServiceImpl.java:434[defa ...

  4. 【转】Java中的String为什么是不可变的? -- String源码分析

    什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的.不 ...

  5. SSH整合框架+mysql简单的实现

    SSH整合框架+mysql简单的实现 1. 框架整合原理: struts2整合Spring 两种: 一种struts2自己创建Action,自动装配Service : 一种 将Action交给Spri ...

  6. 使用ScriptManager服务器控件前后台数据交互

    前台页面信息: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebFor ...

  7. Ubuntu 18.04 如何固定图标到任务栏

    参考 https://blog.csdn.net/u014160286/article/details/81631863

  8. CorelDRAW 中文官网 618 48H秒杀开始,多重好礼即刻开抢!

    618我有诚意,你呢? 不花钱的618,是残缺的618 给自己一个放肆shopping的机遇 活动力度不够大? 继续升级,终极体验 6月17日—6月18日 618疯狂48小时!   同志们,如果你错过 ...

  9. .net core里用ZXing生成二维码

    先获取Nuget包 static void Main(string[] args) { string content = "二维码信息"; BitMatrix byteMatrix ...

  10. IDEA 基本配置

    idea使用基本配置 1配置JDK开发环境 File->project structure: 2取消自动更新 file->setting:Appearance &Behavior下 ...