编写代码经常需要定义常量,例如,写一个UI动画,需要定义一个动画播放时间,通常做法
#define ANIMATION_DURATION 5
这行预处理指令会把源代码中的ANIMATION_DURATION替换为5,可以实现需求,但是这样写不太好,其原因:
解决此问题,可以利用编译器的特性,代码如下
static const NSTimeInterval kAnimationDuration = 5;
这样定义的好处
#import "ViewController.h"
static const NSTimeInterval kAnimationDuration = 5;
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self animation];
}
- (void)animation{
[UIView animateWithDuration:kAnimationDuration animations:^{
}];
}
@end
注意:变量一定要同时用static与const来声明。 const修饰符所声明的变量,如果修改就会报错 static修饰符则意味着该变量仅在定义此变量的.m文件可见
#import <UIKit/UIKit.h>
@interface LoginViewController : UIViewController
extern NSString *const LoginNoti;
@end
#import "LoginViewController.h"
NSString *const LoginNoti = @"login";
@implementation LoginViewController
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter]postNotificationName:LoginNoti object:nil];
}
@end
#import "ViewController.h"
#import "LoginViewController.h"
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(run) name:LoginNoti object:nil];
}
- (void)run{
NSLog(@"run");
}
@end
Effective+Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法