Objective-C 学习笔记之使用跨文件依赖关系

本文介绍了Objective-C中如何拆分接口和实现,通过头文件(.h)和实现文件(.m)进行组织。讲解了跨文件依赖关系的工作原理,当头文件发生改变时,依赖它的文件需要重新编译。同时,讨论了使用@class关键字来避免导入全部信息,以及在需要完整类信息时使用#import的场景,如继承超类时。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

跨文件依赖关系

1.拆分接口和实现

在oc中,类的定义中,很自然的被拆分成接口和实现两个部分,所以类的代码可以分别放在两个文件夹里;一个文件(头文件,.h结尾)存放接口部分代码:类的@interface指令,公共struct定义,enum常量,#defines和extern全局变量等。另一个文件(以.m结尾)存放所有的实现内容。

2.拆分 Car 程序

Tire.h文件内容

#import <Cocoa/Cocoa.h>

@interface Tire:NSObject
@end//Tire

Tire.m文件内容

#import "Tire.h"

@implementation Tire

-(NSString *) description
{
    return (@"I'm a tire,I last a while");
}

@end //Tire

同理对 Engine 类的拆分:

//Engine.h 文件
#import <Cocoa/Cocoa.h>

@interface Engine:NSObject
@end //Engine
//--------------分割线----------
//Engine.m 文件
#import "Engine.h"

@implementation Engine
-(NSString *) description
{
    return (@"I'm an engine . Vroom!");
}//description
@end//Engine

3.使用跨文件依赖关系
简单来说就是,如果头文件中有任何变化,那么所有依赖它的文件都要重新编译。

4.重新编译须知
导致依赖关系的问题原因是,OC编译去需要知道某些信息才能够工作。有时需要知道类的全部信息,有时只需要知道类名。
OC 引入一个关键字@class 来告诉编译器只会通过指针来引用该类,不必知道该类的全部信息。

#import <Cocoa/Cocoa.h>
@interface Car:NSObject
-(void) setEngine:(Engine *)newEngine;
-(Engine *)engine;

-(void) setTire:(Tire *)tire atIndex:(int) index;
-(Tire *)tireAtIndex:(int) index;

-(void) print;
@end//Car

当我们使用该头文件的时候,编译会报错,因为编译器无法知道Tire和Engine 到底是什么东西。

有两种方式解决:
一:
使用#import 语句导入 Tire.h 和 Engine.h

二:
Car类的接口,只是通过指针引用了Tire 和 Engine 所以可以使用@class

#import <Cocoa/Cocoa.h>

@class Tire
@class Engine

@interface Car:NSObject

-(void) setEngine:(Engine *) newEngine;
-(Engine *) engine;

-(void) setTire:(Tire *) tire atIndex:(int) index;
-(Tire *) tireAtIndex:(int) index;

-(void) print;

@end//Car

但是,当我们有一个类继承自我们自己创建的另一个类的时候,就不能用@class ,因为编译器需要知道超类的所有信息,才能成功的为子类编译@interface部分,这时,只能使用#import 语句导入超类的头文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值