const和全局常量的管理

Posted on 2016-01-08 19:05  懒惰的土拨鼠  阅读(1320)  评论(0)    收藏  举报

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 ;