const作用:
- 1.修飾右邊指針變量和基礎(chǔ)變量
- 2.被修飾的變量不可變
const使用場景:
- 修飾全局變量--->全局只讀變量--->代替宏
- 修飾方法中的參數(shù)
const注意:
- int *const p: p只讀 *p讀寫
- int const *p1: p1讀寫 *p1只讀
- int const *const p2: p2只讀 *p2只讀
- const int *const p3: p3只讀 *p3只讀
例子:
#import "ViewController.h"
NSString * const name=@"DeerLu";//代替宏
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// name=@"3333";
int a=2;
[self test:&a];
}
//a不可以改變
-(void) test:(int const *) a {
// *a=3;
}
const與宏區(qū)別
| const | 宏 |
|---|---|
| 編譯 | 預(yù)編譯 |
| 有編譯檢查 | 無編譯檢查 |
| 不可以 | 可以定義函數(shù)方法 |
| 導(dǎo)致預(yù)編譯時(shí)間較長 |
static的作用:
- 1、修飾局部變量,
- 1.延長生命周期,而且和整個(gè)應(yīng)用程序有關(guān)
- 2.只會分配一次內(nèi)存
- 3.為什么只分配一次內(nèi)存?
- 2、修飾全局變量,限制作用域,只能在在當(dāng)前文件使用
例子
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
// 只分配一次內(nèi)存
static int number=0;
number++;
NSLog(@"%i",number);
}
extern的作用:
- 只能用來聲明外部全局變量,不能定義
extern NSString *name;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
NSLog(@"name:%@",name);
return YES;
}
2017-05-25 14:32:40.034 constAndStaticAndextern[3025:1138607] name:DeerLu
static 和 const 聯(lián)合使用
可以將全局變量限制在本文件使用,如:
#import "ViewController.h"
NSString * const name=@"DeerLu";//代替宏
static NSString * const text=@"1111";
@interface ViewController ()
@end
******************************************
@implementation AppDelegate
extern NSString *name;
extern NSString *text;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
NSLog(@"name:%@",name);
NSLog(@"name:%@",text);//找不到_text,報(bào)錯(cuò)
return YES;
}
extern和const聯(lián)合使用
當(dāng)const修飾全局變量時(shí),可能存在重復(fù)命名的情況。所以全局變量不能動(dòng)易在自己的類中,必須建立項(xiàng)目全局變量。
例子,如果要使用全局變量,只需導(dǎo)入#import "GlobalConst.h"即可
#import <Foundation/Foundation.h>
extern NSString * const name;
extern NSString * const day;
**************************************
#import "GlobalConst.h"
NSString * const name;
NSString * const day;