IOS OC 向前声明 forward declaring

一 向前引用 forward declaring

Objective-c 编写类 分别创建两个文件,头文件用.h,实现文件后缀用.m,代码示例如下:

== .h 文件
#import <Foundation/Foundation.h>
@interface Dog : NSObject
    @property (nonatomic, strong) NSString *name;
@end


== .m 实现文件
@implementation Dog
@end

查看Dog.h 文件,用Objective-C语言编写任何类几乎都需要引入Foundation.h,如果不引入这个文件的话,则需要引入预期超类所属框架相对应的"基本头文件"(base header file)。


现在创建个Person类,并引入Dog类

== .h 文件
#import <Foundation/Foundation.h>
#import “Dog.h" //引入Dog.h
@interface Person : NSObject
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) Dog *dog;
@end

== .m文件
@implementation Person
@end


当系统编译Person.h 文件的时候,Dog 并不可见,必须引入Dog.h,常见方法为

#import "Dog.h"

由于在编译 Person 类的文件时,不需要知道Dog类的全部细节(Dog 类中的方法),若使用 #import "Dog.h"  则必须知道Dog.h的全部细节,而Person类中只需要知道类名Dog就可以了,可用通过以下方式告诉编译器@class Dog;这种方式娇 向前声明 (forward declaring)


修改后的Person.h 文件如下

== .h 文件
#import <Foundation/Foundation.h>
#class Dog; //引入Dog.h
@interface Person : NSObject
    @property (nonatomic, strong) NSString *name;
    @property (nonatomic, strong) Dog *dog;
@end


== .m 文件
#import "Dog.h"  //Person 的实现文件则需要引入Dog.h文件,需要知道Dog所有接口细节。
@implementation Person
@end


向前引用,就是将引入头文件的时间尽量延后,只在确有需要时才引入,这样就可用减少类的使用者所需要引入的头文件数量。



二 向前声明解决的问题

向前声明解决了两个类互相引用的问题。

假如Dog 类中,需要添加Persion 属性,如果使用使用#import "Person.h"则会导致循环引用,当解析到Dog.h文件时,编译器会发现它引入Person.h头文件,编译器在引入Person.h头文件时,Person.h头文件反过头来引用Dog.h头文件,造成循环引用。


三 总结

向前声明可用降低编译时间,除非必要,则可以使用向前申明,并在实现文件中映入头文件,这样做可用尽量降低类之间的耦合


转载于:https://my.oschina.net/wolx/blog/470405

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值