`

深入理解Objective-c中@class的含义

 
阅读更多

 

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

Car.h

1

2

3

4

5

6

7

8

9

#import 

 

@interface Car:NSObject

{

    Tire *tires[4];

    Engine *engine;

}

 

...

实现类我们先省略,如果你直接这么编译,编译器会报错,告诉你它不知道Tire和Engine是什么。

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

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

所以,一般来说,@class是放在interface中的,只是为了在interface中引用这个类,把这个类作为一个类型来用的。 在实现这个接口的实现类中,如果需要引用这个类的实体变量或者方法之类的,还是需要import在@class中声明的类进来.

如:
a.h

1

2

3

4

@class Rectangle;

@interface A : NSObject {

...

}

a.m

1

2

3

#import Rectangle

@implementation A

...

分享到:
评论

相关推荐

    Objective-C编程全解最新版.pdf.zip

    "Objective-C编程全解最新版.pdf.zip"这个压缩包显然包含了关于Objective-C编程的全面教程,旨在帮助开发者深入理解并掌握这门语言。下面将详细阐述Objective-C的主要知识点。 1. **Objective-C基础**:Objective-C...

    Objective-C 入门手册 中文版(Objective-C Beginner's Guide)

    - 推荐阅读Steve Kochan的《Programming in Objective-C》以获取更深入的学习材料。 - 注意知识产权,未经许可不要复制和转载示例代码。 在学习Objective-C时,了解这些基本概念和机制是至关重要的。熟悉它们可以...

    objective-c基础教程

    Objective-C继承了C语言的基础语法结构,并在此基础上增加了面向对象的特性,包括类(Class)、对象(Object)、消息传递(Message Passing)等概念。具体特点如下: 1. **动态性**: Objective-C是一种动态类型的语言,这...

    Objective-C - Learning Objective-C 2.0 Second Edition

    通过对C语言基础的巩固、面向对象编程的理解以及Objective-C语言特性的深入学习,读者可以逐步建立起坚实的Objective-C编程技能。无论你是新手还是有经验的开发者,本书都将为你提供宝贵的指导和支持。

    从 C++ 到 Objective-C 快速精通

    C++程序员需要理解Objective-C中的`@interface`、`@implementation`和`@end`关键字的用法,以及如何声明和实现方法。 2. 消息传递:Objective-C使用消息传递进行方法调用,这与C++的函数调用不同。在Objective-C中...

    objective-c运行时编程指南

    本指南旨在详细介绍Objective-C的运行时系统及其核心概念,帮助开发者更好地理解和利用这一特性。 #### 概述 Objective-C语言设计的核心理念之一是尽可能将决策推迟到运行时。这意味着Objective-C不仅需要一个...

    Manning.Objective-C.Fundamentals.Sep.2011.rar

    《Objective-C Fundamentals》是由Manning出版社在2011年9月出版的一本深入讲解Objective-C编程语言的书籍。这本书旨在为初学者提供全面、扎实的Objective-C基础,同时也适合有一定经验的开发者巩固和深化对这门语言...

    Objective-C 基础教程源码

    本教程的源码旨在帮助初学者深入理解Objective-C的基础概念和语法。 一、Objective-C 的基本结构 Objective-C 的程序主要由类(Class)和对象(Object)构成。类是数据和操作这些数据的方法的蓝图,而对象是类的...

    Objective-C编程(第四版)英文原版

    通过阅读"Objective-C编程(第四版)"这本书,你将深入理解这些概念,并获得实践经验,从而成为一名熟练的Objective-C开发者。附带的`readme_Xcode.html`可能是关于如何使用Xcode的指南,而`Programming in ...

    iphone(Objective-C)

    在学习Objective-C时,首先需要理解其基础语法,包括类(Class)、对象(Object)、消息传递(Message Passing)以及协议(Protocol)。类是面向对象编程的基础,定义了对象的结构和行为;对象则是类的实例,拥有...

    《Objective-C2.0程序设计(原书第2版)》_中文完整版

    在这一部分中,还涉及了函数、数组、结构体和指针等C语言元素,因为Objective-C建立在C语言之上,所以对这些基础概念的掌握对于学习Objective-C至关重要。 第二部分关注于Foundation框架的详细阐述。Foundation框架...

    Learn Objective-C On The Mac(英文PDF+SourceCode)

    Objective-C是一种强大的面向对象编程语言,特别是在Apple的Mac OS X和iOS操作系统中广泛使用。它作为C语言的超集,引入了Smalltalk的类和消息传递机制,为开发者提供了丰富的功能和灵活性。"Learn Objective-C On ...

    Objective-C 基础教程-中文版

    这篇“Objective-C 基础教程-中文版”是针对初学者和希望深入理解Objective-C的开发者设计的,旨在帮助他们掌握这一强大的编程工具。 一、Objective-C的基本概念 1. 类(Class):Objective-C中的核心是类,它是...

    Objective-C Runtime Guide.pdf

    - 了解Runtime底层实现有助于理解Objective-C中的性能瓶颈所在,从而采取相应措施进行优化。 4. **错误处理和调试** - Runtime提供了一些工具和API来帮助开发者检测和修复运行时错误,比如检查方法是否存在、对象...

    Pro Objective-C

    本章深入讲解了Objective-C中的类(Class)概念,包括类的定义、继承关系、属性(Property)等基本元素。读者将学会如何创建自己的类,并利用Objective-C的面向对象特性来构建复杂的程序结构。此外,还会涉及到实例...

    objective-c 中文手册

    这些示例大多来源于Steve Kochan的《Objective-C编程》,若需要更深入的学习,建议参考原书。 - **设定环境**: - **Linux/FreeBSD**: 需要安装GNUStep,并运行特定脚本来配置环境。具体步骤为执行`GNUstep.sh`脚本...

    Programming.in.Objective-C

    《Programming in Objective-C》是由Stephen G. Kochan所著的一本书,它介绍了Objective-C编程...这本书为开发者提供了详尽的学习资料,能够帮助他们深入理解Objective-C编程,并在苹果平台上开发出高质量的应用程序。

    Objective-C 2.0 with Cocoa Foundation(中文)

    Class 类型、选择器和函数指针是 Objective-C 中非常重要的概念。Class 类型允许你访问类的元信息,而选择器则是用于发送消息的标识符。函数指针则是一种指向函数的指针类型,这对于实现某些设计模式非常有用。 ###...

    Objective-C 2.0程序设计(2011第3版)

    本书《Objective-C 2.0程序设计》第三版提供了详细的入门教程,虽然为英文版,但对于希望深入了解Objective-C的开发者来说,是一本不可或缺的学习资料。通过掌握Objective-C的基础知识和面向对象编程的核心概念,...

Global site tag (gtag.js) - Google Analytics