`
cuichang
  • 浏览: 94981 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

[Object-C]@class的含义

阅读更多

在Objective-c中,当一个类需要引用另一个类,即建立复合关系的时候,需要在类的头文件中建立被引用类的指针。 如:

Car.h

#import 
 
@interface Car:NSObject
{
    Tire *tires[4];
    Engine *engine;
}
 
…
实现类我们先省略,如果你直接这么编译,编译器会报错,告诉你它不知道Tire和Engine是什么。

这时候有两个选择,一个是import这两个被引用类的头文件,另一个是使用@class声明Tire和Engine是类名。 二者的区别在于:

import会包含这个类的所有信息,包括实体变量和方法,而@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,暂时不用考虑,后面会再告诉你。 
在头文件中, 一般只需要知道被引用的类的名称就可以了。 不需要知道其内部的实体变量和方法,所以在头文件中一般使用@class来声明这个名称是类的名称。 而在实现类里面,因为会用到这个引用类的内部的实体变量和方法,所以需要使用#import来包含这个被引用类的头文件。 
在编译效率方面考虑,如果你有100个头文件都#import了同一个头文件,或者这些文件是依次引用的,如A–>B, B–>C, C–>D这样的引用关系。当最开始的那个头文件有变化的话,后面所有引用它的类都需要重新编译,如果你的类有很多的话,这将耗费大量的时间。而是用@class则不会。 
如果有循环依赖关系,如:A–>B, B–>A这样的相互依赖关系,如果使用#import来相互包含,那么就会出现编译错误,如果使用@class在两个类的头文件中相互声明,则不会有编译错误出现。 
所以,一般来说,@class是放在interface中的,只是为了在interface中引用这个类,把这个类作为一个类型来用的。 在实现这个接口的实现类中,如果需要引用这个类的实体变量或者方法之类的,还是需要import在@class中声明的类进来.

如:
a.h

@class Rectangle;
@interface A : NSObject {
…
}
a.m

#import Rectangle
@implementation A

转自: http://blog.sina.com.cn/s/blog_69081e060100p4r1.html

分享到:
评论

相关推荐

    object c 入门教程,非中文版,英文版

    关键字`@interface`, `@implementation`, `@protocol`, `@property`, `@class` 和 `@end` 在Objective-C中具有特殊含义。 2. 类与对象: - 类:Objective-C中的类定义了对象的行为和属性。使用`@interface`声明类,...

    TC 编译连接错误提示信息

    本文将详细介绍Turbo C编译器(以下简称TC)中的常见错误类型及其对应的含义与解决方法。 #### 错误类型 TC编译器通常会报告三种类型的错误信息:致命错误、一般错误和警告。每种类型的错误对程序的影响不同,理解...

    python面试题

    这与C语言中的指针类似,但又有本质的区别。Python中所有变量都是对内存中某个对象的引用。 - **不可变对象与可变对象的区别** - 不可变对象包括字符串、元组和数字等。这些对象一旦创建后,其内容不能被改变。...

    网讯iOS笔试题

    例如,`[object method]`实际上是向`object`发送一个名为`method`的消息。 ### 8. 协议的实现 协议在Objective-C中用于定义一个接口,该接口声明了一组方法,但没有提供具体的实现。以下是一个简单的协议实现示例...

    ios开发ios基础开发面试题.txt

    - **定义**:Objective-C是一种通用、面向对象的编程语言,它在C语言的基础上增加了面向对象的功能。它是苹果公司开发iOS和macOS应用的主要语言之一。 - **特点**: - 动态类型:变量可以在运行时绑定到任何类型的...

    Eclipse各种图标含义

    Eclipse 图标含义详解 Eclipse 是一个功能强大且流行的集成开发环境(IDE),它提供了许多实用的图标来帮助开发者快速了解项目结构和元素之间的关系。但是,这些图标的含义并不总是显而易见的,特别是对于初学者来...

    Eclipse中常见图标说明

    以下是对Eclipse中常见图标及其含义的详细说明: 1. **Objects**: - **Compilation Unit(*.java 文件)**:表示一个Java源代码文件,通常包含一个或多个类定义。 - **Class File**:编译后的字节码文件,对应于...

    iOS笔试题041

    在iOS开发中,Objective-C(Object-C)是主要的编程语言。以下是对题目中提到的知识点的详细解释: 1. **Object-C的继承机制**: - Objective-C不支持多继承,以避免复杂的继承关系导致的问题。为了实现类似的功能...

    tc编程错误手册下载,很好的

    - **含义**:编译器使用的配置文件(如TURBOC.CFG)存在格式或内容上的错误。 - **解决方法**: 1. 打开并检查配置文件,确保格式正确。 2. 参考官方文档或示例文件。 - **Bad filename format in included ...

    东北财经大学20春《信息系统分析与设计》单元作业三(参考答案).docx

    OOC(Object-Oriented Class,面向对象类) - C. OOP(Object-Oriented Programming,面向对象编程) - D. OOA(Object-Oriented Analysis,面向对象分析) 正确答案是D,OOA(面向对象分析),它定义了系统中...

    JAVA 省略语与名词解释.rar

    - **JNI**: Java Native Interface,Java本地接口,允许Java代码调用C/C++等本地代码。 - **GUI**: Graphical User Interface,图形用户界面,Java提供了Swing和JavaFX库来创建桌面应用的界面。 - **JDBC**: Java...

    Tedu一段Java面向对象之继承

    在Java中,面向对象的核心概念包括类(Class)、对象(Object)、封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)等。 **1. 类与对象** - **类(Class)**:是对一组具有相同属性和行为的对象...

    2021-2022计算机二级等级考试试题及答案No.1855.docx

    class Stack(object): def __init__(self): self.stack = [] def isEmpty(self): return self.stack == [] def push(self, item): self.stack.append(item) def pop(self): if self.isEmpty(): raise ...

    c++基础教程,简洁扼要

    其中 class_name 是类的名称 (用户自定义的类型) ,而可选项object_name 是一个或几个对象(object)标识。Class的声明体中包含 成员members,成员可以是数据或函数定义,同时也可以包括允许范围标志 permission ...

    php中符号的含义

    - **对象**:`object` - 描述:表示一个实例化的类。 - 示例: ```php class Person { public $name; } $person = new Person(); $person->name = 'John'; ``` #### 五、字符串操作符号 1. **字符串...

    c面向对象.docx

    面向对象编程(Object-Oriented Programming,OOP)是一种广泛应用于现代软件开发的方法论,它强调将现实世界的问题抽象为类和对象,并通过这些类和对象之间的交互来解决问题。C++ 是面向对象编程的一种代表语言,...

    oops-cpp-c-important-programs:运行这些程序,获得结果,学习并获得乐趣

    在编程领域,面向对象编程(Object-Oriented Programming,简称OOP)是一种广泛采用的编程范式,尤其在C++和C语言中。标题“oops-cpp-c-important-programs”暗示了这个压缩包可能包含一系列关于OOP概念的C++和C语言...

    Cocos2d-xJniHelper类详细使用1

    在Cocos2d-x开发中,跨语言交互是常见的需求,尤其是当涉及到Android平台时,因为Android应用的主要编程语言是Java。Cocos2d-x提供了一个名为`...理解`JniHelper`的工作原理和参数含义,有助于更高效地进行跨语言交互。

Global site tag (gtag.js) - Google Analytics