iOS学习iOS归纳比较

const / define / static / extern

2015-11-12  本文已影响601人  iOS_成才录

一、全局变量 / 宏 / 常量 比较

int age = 20; 缺点:能修改,优点:内存中只保存一份,不会产生很多临时空间

+ 宏:
```objc
#define age 20 优点:不可修改,缺点:会产生很多临时的内存空间
const int age = 20;优点:不能修改只读,且内存中只会有一份存储空间 
// 等价于 int const age = 20;

二、 总结:

三、作用域

四、 应用:

1. 字符串常量
// cellID 字符串被const 修饰了,,字符串类型的cellID不可改
 NSString * const cellID = @"cellTagID"; // 注意:NSString字符串 == 一个指针指向它

 int const *age = 10; // age 不可修改
// 是错误的,因为[UIColor redColor] -> 是在运行时才确定的,不符合常量使用的潜规则
UIColor *const JPGlobalColor = [UIColor redColor];

// 宏定义正确
#define JPGlobalColor [UIColor redColor]
2. cell标识
// JPHomeCellID,仅限当前文件,不可改,只占一份内存空间。
static NSString *const JPHomeCellID = @"JPHomeCellID";
3. URL字符串,保证全世界内存只有一份且全世界都可以访问,且不可更改
3.1 思路分析
3.2 解决方案
// 不可行,因为pch文件内容会拷贝到每一个文件中,这样会引起重复定义问题
NSString *const  JPRequestURL = @"http://baidu.com";

NSString *const JPRequestURL = @"http://baidu.com";

   - 2.然后在pch文件中引用const.m文件中定义的常量
```objc
 extern NSString *const  JPRequestURL;  // extern 引用常量,这样就解决的只在pch中定义常量引起的重复定义的问题,而且保证了一份内存

NSString *const JPRequestURL = @"http://baidu.com";

    + 在const.h文件(引用定义的全局常量)中引用定义的全局常量
 ```objc
#import <UIKit/UIKit.h>
// URL
UIKIT_EXTERN NSString *const JPRequestURL;
+ 在pch文件中导入const.h文件即可
#import "const.h"
4. 定义Rect结构体变量commonRect,要求只有本文件中能访问,且不可修改
// 正确
static CGRect const commonRect = {{0,0},{50,50}}; 
// 错误
static CGRect const commonRect = CGRectMake(0,0,50,50);

五、全局常量写法

1. 仅限本文件中访问
static 类型 const 常量名 = 常量值;
2. 全世界都要访问
#import <UIKit/UIKit.h>
类型 const 常量名 = 常量值;
.........
#import <UIKit/UIKit.h>
UIKIT_EXTERN 类型 const 常量名;
.........
#import "const.h"
上一篇下一篇

猜你喜欢

热点阅读