多用类型常量,少用#define预处理指令

出自Effective Objective-C 2.0

#define ANIMATION_DURATION 0.3
复制代码

使用预处理指令会把源代码中的ANIMATION_DURATION替换为0.3,但是这样定义出来的常量没有类型信息.此外,加入该指令声明在某个头文件内,那么所有引入这个头文件的代码中,其ANIMATION_DURATION都会被替换掉.

解决方法:

static const NSTimeInterval kAnimationDuration = 0.3;
复制代码

上面的代码定义了一个类型为NSTimeInterval的常量.这种方式定义的常量包含了类型信息,好处是清楚的描述了常量的含义.

常用的命名法: 若常量局限于某"编译单元"(translation unit也就是"实现文件", implementation file)之内,则在前面加字母k, 若常量在类之外可见,则通常以类名为前缀.

如果不打算公开某个常量,则应将其定义在使用该常量的实现文件里.

#import "EOCAnimatedView.h"

static const NSTimeInterval kAnimationDuration = 0.3;

@implementation EOCAnimatedView

@end
复制代码

变量一定要同时使用static与const来声明.static表示只能在本文件内访问,文件作用域.const修饰的变量是不能被修改,如果修改了编译器就会报错.如果不加static,那么编译器会为它创建一个"外部符号"(external symbol),如果另一个编译单元也声明同名变量,那么编译器就会抛出如下错误消息:

总结如下:
1. 如果只是在.m文件中使用的常量那么使用static const 来修饰.
2. 如果在X.m文件中创建了一个常量const NSUInteger kAnimationRepeatCount = 3;,
    希望外部文件访问,那么可以使用const来修饰,那么如果A.m文件要    访问X.m文件中创建的常量kAnimationRepeatCount,
    可以在A.m文件中声明一下 extern const kAnimationRepeatCount; 那么就可以获取到kAnimationRepeatCount该常量的值
    extern const kAnimationRepeatCount;的意思是声明kAnimationRepeatCount该常量是一个外部的.
3. 使用#define,只会进行替换,并且没有类型提示.
复制代码

转载于:https://juejin.im/post/5a376c4af265da433562dc06

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值