OC基础回顾 (五)源文件组织

  • 拆分接口和实现
    类的@interface指令、公共struct定义、enum常亮、#define和extern全局变量等代码通常放在头文件.h文件中。
    所有的实现内容,例如@implementation指令、全局变量的定义、私有struct等代码都放在.m文件中。
    如果用.mm做文件扩展名,编译器就会认为你使用Objective-C++编写的代码,这样就可以同时使用C++和Objective-C来编程了。

  • 导入头文件
    导入头文件有两种方法:使用引号或者尖括号。
    带尖括号的语句用于引用系统头文件,是只读的。
    而带引号的语句说明导入的是项目本地的头文件,是可编辑的。

  • 使用跨文件依赖关系
    依赖关系(dependency)是两个实体之间的一种关系。
    依赖关系存在于两个或多个文件之间。
    导入头文件使头文件和源文件之间建立了一种紧密的依赖关系。如果头文件有任何变化,那么所有依赖它的文件都得重新编译。
    依赖关系是传递的,头文件之间也可以相互依赖。
    文件导入过于混乱会使依赖关系混乱,从而导致重新编译花费很长时间。所以巧妙的使用@class指令,可以减少必须导入的头文件的数量,从而缩短编译时间。

  • @class
    Objective-C引入了@class关键字,用来告诉编译器:“这是一个类,所以我只会通过指针来引用它”,这样编译器就不必知道关于这个类的更多信息,只要了解它是通过指针来引用的即可。
    例如:

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

-(void)setTire:(Tire *)newTire andIndex:(int)index;
-(Tire *)tireAtIndex:(int)index;
@end //Car

如果我们现在想使用Car.h头文件,会得到错误消息,例如error: expected a type “Tire”,编译器是说“我无法理解这个”。我们有两种方法来解决,第一种是在头文件中#import语句导入Tire.h和Engine.h,这样编译器会获取这两个类的许多信息。
此外,还有一个更好的方法。因为在Car.h文件中,它只是通过指针引用了Tire类和Engine类,所以我们可以用@class来实现。

#import <Cocoa/Cocoa.h>
@classTire.h"
@classEngine.h"

@interface Car : NSObject
-(void)setEngine:(Engine *)newEngine;
-(Engine *)engine;

-(void)setTire:(Tire *)newTire andIndex:(int)index;
-(Tire *)tireAtIndex:(int)index;
@end //Car

这样就足以告知编译器处理Car类的@interface部分所需要的全部信息了。

@class创建了一个前向引用。这是在告诉编译器,只能使用被声明的符号,而不能涉及类的任何细节。
如果有循环依赖关系,@class也很管用。即A类使用了B类,B类也使用了A类,如果试图通过#import语句让这两个类相互引用,那么就会出现编译错误。但是如果在A.h文件中使用@classB,在 B.h文件中使用@class A,那么这两个类就可以相互引用了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TTL(Transistor-Transistor Logic)是一种数字电路家族,它采用晶体管作为主要的开关元件。TTL电平指的是逻辑电平,即高电平和低电平。在TTL电路中,当输入电压超过某一阈值(通常为0.8V),输出端就会被拉低,表示为低电平;当输入电压低于该阈值时,输出端则为高电平。这种电平转换方式可保证电路输入和输出之间的准确逻辑关系。 CMOS(Complementary Metal-Oxide-Semiconductor)是一种数字电路家族,它采用MOS(Metal-Oxide-Semiconductor)晶体管作为主要的开关元件。与TTL不同的是,CMOS电平和TTL电平的定义方式有所差异。在CMOS电路中,当输入电压低于某一阈值(通常为1/2 VCC),输出端会被拉低,表示为低电平;当输入电压超过该阈值时,输出端则为高电平。CMOS电路具有低功耗、高噪声抑制能力和较高的抗干扰能力等优点。 OC门(Open Collector Gate)是一种数字门电路,它具有开漏输出特性。在OC门中,输出端可以连接到外部负载电阻,使得输出端既能输出低电平(当OC门导通时),又能够高阻断(当OC门截止时)。这意味着OC门可以直接与其他门电路或设备组成开漏输出的连接方式,通过挂载上拉电阻,可以实现与其他数字电路的电平适配。 综上所述,TTL和CMOS电平都是用来描述数字电路的逻辑电平,只是它们的电平定义方式稍有不同。而OC门则是一种特殊的数字门电路,具有开漏输出的特性,适用于与其他数字电路的连接和电平适配。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值