`
linwwwei
  • 浏览: 224374 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Objective-C中@class和#import的问题(转载)

阅读更多

Objective-C中@class和#import的问题。参考

假设,有两个类:ClassA和ClassB,两个之间相互使用到,即构成了circular dependency(循环依赖)。如果在头文件里面只用#import把对方的头文件包含进来(构成circular inclusions,循环包含),则编译器会报错:

Expected specifier-qualifier-list before ‘ClassA’

或者

Expected specifier-qualifier-list before ‘ClassB’

为了避免循环包含,在ClassA.h文件里面用@class classB把classB包含进来,同样,在ClassB.h文件里面用@class ClassA把ClassA包含进来。@class指令只是告诉编译器,这是个类,保留个空间来存放指针就可以了。

接下来,很可能在ClassA.m和ClassB.m中会有访问包含进来对象的成员的情况,这时必须让编译器知道更多信息,比如那个类有些什么方法可以调用,就必须用#import,再次把用到的类包含进来,告诉编译器所需要的额外信息。

否则,编译器会警告:

warning: receiver ‘ClassA’ is a forward class and corresponding @interface may not exist

还有另一种情况,使用有Categories的类,要在.h头文件里用#import把Categories包含进来。

总之,使用原则是:

  1. 头文件里面只#import超类
  2. 消息文件里面#import需要发消息过去的类
  3. 其他地方就用@class转向声明

分享到:
评论

相关推荐

    Objective-C与Objective-C++的混用代码示例

    Objective-C是基于C语言的,主要用于构建iOS和macOS应用程序,而Objective-C++则是Objective-C的一个扩展,它引入了C++的特性,使得开发者可以同时利用Objective-C的动态特性和C++的面向对象编程能力。 ### ...

    Objective-C基础教程(入门教程).pdf

    19. Import指令:在Objective-C中,@import指令用于导入头文件,这与C语言中的#include指令类似,但通常更为高效。 20. 预处理器指令:Objective-C代码中使用了诸如#import、#define等预处理器指令,这些指令在编译...

    windows 下搭建 Objective-C 开发环境

    尽管Objective-C主要与Apple的平台(如iOS和macOS)相关联,但有时候,出于某些原因(比如团队协作或个人偏好),开发者可能需要在非Apple的操作系统(如Windows)上构建Objective-C应用程序。本文将详细介绍如何在...

    objective-c 中文手册

    - **#import vs #include**:Objective-C推荐使用`#import`,它可以避免重复包含头文件的问题。 - **Method与Message**:在Objective-C中,方法(Method)和消息(Message)这两个概念可以互换,但在实际操作中,消息...

    Objective-C资料整理

    - **`#import <Foundation/Foundation.h>`**: 这行代码用于导入Foundation框架,这是一个基础库,包含了Objective-C中大量常用的基础类和功能。 - **`@autoreleasepool`**: 这是一个自动释放池的声明。Objective-C中...

    Objective-C基础_快速入门

    Objective-C引入了`#import`指令来替代传统的`#include`,以避免头文件被多次包含的问题。 #### 三、基本数据类型 Objective-C中最常用的数据类型之一是字符串`NSString`。`NSString`是Objective-C中的一个类,...

    objective-c快速入门

    Objective-C 被广泛应用于 macOS 和 iOS 应用程序开发。 ##### 1. 创建 Class 在 Objective-C 中,通过定义类来组织代码。类是对象的模板,对象则是类的实例。下面是一个简单的类定义示例: ```objective-c @...

    Objective-C的语法与Cocoa框架.pdf

    Objective-C中类的定义分为接口(interface)和实现(implementation)两部分。接口定义了一个类的公共API,即类的成员变量和方法声明;而实现则包含了这些方法的具体实现细节。例如,在`Fraction.h`文件中定义了一个`...

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

    Objective-C是一种强大的面向对象的编程语言,特别是在Apple的iOS和macOS开发中占据主导地位。这本书"Objective-C编程(第四版)"是学习这一技术的重要资源。以下是基于书名和描述的一些关键知识点: 1. **面向对象...

    objective-c简体中文手册

    Objective-C是一种面向对象的编程语言,基于C语言并扩展了许多特性,主要用于开发苹果的macOS和iOS操作系统下的应用程序。Objective-C支持动态消息传递机制,使得它可以实现运行时多态性。 #### 二、环境搭建与配置...

    Google的Objective-C编码规范

    Objective-C是一种基于C语言的扩展,强调动态特性和面向对象设计,是Mac OS X和iOS开发的主要语言。Cocoa是Mac OS X的主要应用框架,包含一系列Objective-C类,用于快速构建功能丰富的OS X应用程序。Apple提供了一套...

    From C++ to Objective-C version 1.9

    此外,Objective-C支持条件编译指令,如`#import`和`#include`,用于避免重复导入相同头文件的问题。 #### 六、类与对象 Objective-C中的类是创建对象的基础。每个类都定义了一组属性和方法,它们构成了该类的对象...

    Objective-C 速查手册 1.2 (ARC版)

    在Objective-C中,每个类由两部分组成:类头文件和类实现文件。头文件通常包含类的声明,即属性和方法的签名,用于被其他类引用。 ```objc // 导入其他头文件 #import "AnyHeaderFile.h" // 声明类 @interface ...

    Pro Objective-C

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

    Objective-C培训资料

    - **YES 和 NO:** 在 Objective-C 中,`YES` 和 `NO` 分别代表 `true` 和 `false`。它们被定义为宏,其中 `YES` 宏展开为 `1`,`NO` 宏展开为 `0`。 - **BOOL 类型:** Objective-C 中的 `BOOL` 类型与 C++ 的布尔...

    Objective-C语法

    - **@符号**:Objective-C使用`@`符号引入特殊的关键字和语法,如`@class`用于声明类,`@interface`定义接口,`@implementation`实现接口。 - **NSLog()**:用于输出日志信息,方便调试。 - **BOOL**:Objective-C...

    swift-iOSToast提示框(Objective-C)

    在Xcode中,确保你的项目已经启用“Swift与Objective-C混合编程”(在项目的Build Settings中,搜索"Objective-C Bridging Header"并配置一个桥接头文件)。 接着,我们将通过CocoaPods来安装`YTToast`。在你的`...

Global site tag (gtag.js) - Google Analytics