const 和全局常量的管理
// 宏(只读)
#define WXRed 0.4
#define WXGreen 0.6
#define WXBlue 0.5
// 苹果官方建议 (加const是不希望被改,加了static后,只能在本文件访问)
static const CGFloat WXRed = 0.4;
static const CGFloat WXGreen = 0.6;
static const CGFloat WXBlue = 0.5;
// 全局常量(不写const)(读写)外面可以修改值
CGFloat WXRed = 0.4;
CGFloat WXGreen = 0.6;
CGFloat WXBlue = 0.5;
这两种方式不能同时存在,但是有什么区别呢,都是定义的宏,定义的常量,为什么要采用苹果官方的形式呢?
首先:不管用哪种方式,都是会报错的,常量是不允许赋值的:
@implementation WXtest
-(void)test {
WXRed = 0.7;//常量不能被赋值
}
如果有一堆全局变量,在整个项目中都能用的到,应该单独定义一个header.h文件,将所有的全局常量的引用都放到这个.h文件中(一般命名为const.h),再定义一个空文件:newfile—>other—>empty—>const.m,这样在.h文件中定义,在.m文件中引用,显的更工整一些。
WXconst.h
WXconst.m
// .h文件中放常量的定义(CGFloat属于UIKit所以要导入)
#import <UIKit/UIKit.h>
extern const CGFloat WXRed ;
extern const CGFloat WXGreen ;
extern const CGFloat WXBlue ;
// .m文件中放引用
#import <UIKit/UIKit.h>
const CGFloat WXRed = 0.4;
const CGFloat WXGreen = 0.6;
const CGFloat WXBlue = 0.5;
苹果官方的文档有可能是这样的
UIKIT_EXTERN const UIBackgroundTaskIdentifier UIBackgroundTaskInvalid NS_AVAILABLE_IOS(4_0);
// 其实也就是extern,只不过是加了些判断,c和c++de一些编译特性而已,最主要的就是:UIKIT_EXTERN,如果愿意,自己也可以这样些,实乃装逼神技!
#ifdef __cplusplus
#define UIKIT_EXTERN extern "C" __attribute__((visibility ("default")))
#else
#define UIKIT_EXTERN extern __attribute__((visibility ("default")))
#endif
装逼神技:
#import <UIKit/UIKit.h>
UIKIT_EXTERN const CGFloat WXRed ;
UIKIT_EXTERN const CGFloat WXGreen ;
UIKIT_EXTERN const CGFloat WXBlue ;
UncleX