const、static、extern使用

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;

案例:Demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 在實(shí)際開發(fā)中,const,static,extern是被我們高頻率的使用的關(guān)鍵字。下面具體說明下,這三個(gè)關(guān)鍵...
    c5f8c453b41e閱讀 1,187評論 3 9
  • 一、const與宏的區(qū)別: const簡介:之前常用的字符串常量,一般是抽成宏,但是蘋果不推薦我們抽成宏,推薦我們...
    游某人閱讀 245評論 0 0
  • static 修飾局部變量 讓局部變量只初始化一次 局部變量在程序中只有一份內(nèi)存 并不會改變局部變量的作用域,僅僅...
    大沖哥閱讀 1,475評論 0 1
  • const,static,extern簡介一、const與宏的區(qū)別(面試題):const簡介:之前常用的字符串常量...
    BinaryRo閱讀 281評論 0 1
  • 最近寫代碼,看到很多地方都用到const,決定寫一遍文章記錄一下 首先看到const,我們就想到宏,先看看宏和co...
    wlw_花田半畝閱讀 525評論 0 9

友情鏈接更多精彩內(nèi)容