iOS之const、extern紊浩、static用法

static

static分兩種情況窖铡,修飾局部變量和全局變量。
(1)修飾局部變量
在整個(gè)程序運(yùn)行的過(guò)程中局部變量只初始化一次坊谁,只有一份內(nèi)存万伤,作用域是該方法代碼塊內(nèi)。

#import "ViewController.h"
#import "NetManger.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
    for(int i = 0;i<5;i++)
       {
           [self isNotStatic];
           [self isStatic];
       }
// Do any additional setup after loading the view.
}
-(void)isNotStatic
{
   int i  = 0;
    I++;
   NSLog(@"i====%d",i);
}
-(void)isStatic
{
  static int j  = 0;
    j++;
   NSLog(@"j====%d",j);
}

@end

控制臺(tái)輸出結(jié)果如下:

   2020-10-19 20:25:06.755165+0800 id[2308:41315] i====1
   2020-10-19 20:25:06.755291+0800 id[2308:41315] j====1
   2020-10-19 20:25:06.755418+0800 id[2308:41315] i====1
   2020-10-19 20:25:06.755501+0800 id[2308:41315] j====2
   2020-10-19 20:25:06.755748+0800 id[2308:41315] i====1
   2020-10-19 20:25:06.755860+0800 id[2308:41315] j====3
   2020-10-19 20:25:06.756092+0800 id[2308:41315] i====1
   2020-10-19 20:25:06.756172+0800 id[2308:41315] j====4
   2020-10-19 20:25:06.756301+0800 id[2308:41315] i====1
   2020-10-19 20:25:06.756495+0800 id[2308:41315] j====5

從輸出結(jié)果看出呜袁,i一直是1敌买,而j每次都增加1
isNotStatic方法中,每次都重新初始化一個(gè)全新的局部變量i阶界,執(zhí)行++后變?yōu)?虹钮,出了該方法即作用域后被釋放回收,所以每次打印都是1.而在isStatic方法中膘融,由于局部變量j被關(guān)鍵字static修飾芙粱,讓局部變量只初始化一次,內(nèi)存也只有一份(靜態(tài)存儲(chǔ)區(qū))氧映,在整個(gè)app運(yùn)行期間都不會(huì)被釋放回收春畔。
(2)修飾全局變量
作用域:僅限于當(dāng)前文件內(nèi)部,外部文件無(wú)法訪(fǎng)問(wèn),說(shuō)白了就是在一個(gè)類(lèi)里面定義一個(gè)static全局變量律姨,其他類(lèi)無(wú)法訪(fǎng)問(wèn)的振峻。

[圖片上傳中...(全局變量被static修飾.GIF-94609f-1603112958775-0)]

當(dāng)全局變量使用static修飾后,生命周期沒(méi)有變择份,依舊是程序結(jié)束才銷(xiāo)毀扣孟。但是作用域變了,以前是整個(gè)源程序荣赶,現(xiàn)在只限于申明它的這個(gè)文件才能用凤价,即使用extern引用也不行,如下

全局變量被static修飾.GIF

const作用:限制類(lèi)型
(1)const僅僅用來(lái)修飾右邊的變量(基本數(shù)據(jù)變量p拔创,指針變量*p)
(2)被const修飾的變量是只讀的
舉例如下:

  //定義變量
    int  a = 10;
    //允許修改值
    a = 20;
    
    /*
     const兩種用法利诺,修飾基本變量和指針變量
     */
    //1.修飾基本變量,下面兩種寫(xiě)法等價(jià)
    const int b = 20;//b:只讀變量
    int const bb = 20;//c:只讀變量
    //2.修飾指針變量*p,帶*的變量剩燥,就是指針變量
    //定義一個(gè)指向int類(lèi)型的指針變量慢逾,指向a的地址
    
    int *p = &a;
    int c = 10;
    p = &c;
    //允許修改p指向的地址,
    //允許修改p訪(fǎng)問(wèn)內(nèi)存空間的值
    *p=30;
    //const修飾指針變量訪(fǎng)問(wèn)的內(nèi)存空間躏吊,修飾的是右邊的*p1
    //兩種方式等價(jià)
    const int *p1;//*p1:常量氛改,p1:變量
    int const *p11;//*p11:常量,p11:變量
    //const修飾指針變量p1
    int *const p111;//*p111:變量 p111:常量
     // 第一個(gè)const修飾*p1 第二個(gè)const修飾 p1

   // 兩種方式一樣
    const int * const p2; // *p2:常量 p2:常量
    int const * const p22;  // *p2:常量 p2:常量 

歸納為下面四種情況:

  int  const  *p   //  *p只讀 ;p變量

  int  * const  p  // *p變量 ; p只讀

  const  int   * const p //p和*p都只讀

  int  const  * const  p   //p和*p都只讀

總結(jié): 判斷p 和p是只讀還是變量帐萎,關(guān)鍵是看const在誰(shuí)前面比伏。如果p前面,那么p只讀, *p還是變量疆导;如果在*p前面,那么*p只讀 赁项,p變量。

const開(kāi)發(fā)使用場(chǎng)景:

  • 當(dāng)一個(gè)方法參數(shù)只讀

  • 定義只讀全局變量

      #import "ViewController.h"
      #import "NetManger.h"
      @interface ViewController ()
    
      @end
    
      @implementation ViewController
      NSString *const globalVar = @"123";
    
      - (void)viewDidLoad {
      [super viewDidLoad];
      // Do any additional setup after loading the view.
      }
    // 當(dāng)一個(gè)方法的參數(shù)澈段,只讀.
    
      - (void)constTestWithStr:(NSString * const)name
    
      {
    
      }
      // 指針只讀,不能通過(guò)指針修改值
      - (void)constTestWithIntPointer:(int const *)a{
    
          //*a = 10;錯(cuò)誤寫(xiě)法
    
      }
     // 基本數(shù)據(jù)類(lèi)型只讀
      - (void)constTestWithInt:(int const)a{
        }
    
      @end
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末悠菜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子败富,更是在濱河造成了極大的恐慌悔醋,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,835評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兽叮,死亡現(xiàn)場(chǎng)離奇詭異芬骄,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)鹦聪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門(mén)账阻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人泽本,你說(shuō)我怎么就攤上這事淘太。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,481評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵蒲牧,是天一觀的道長(zhǎng)撇贺。 經(jīng)常有香客問(wèn)我,道長(zhǎng)造成,這世上最難降的妖魔是什么显熏? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,303評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮晒屎,結(jié)果婚禮上喘蟆,老公的妹妹穿的比我還像新娘。我一直安慰自己鼓鲁,他們只是感情好蕴轨,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,375評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著骇吭,像睡著了一般橙弱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上燥狰,一...
    開(kāi)封第一講書(shū)人閱讀 49,729評(píng)論 1 289
  • 那天棘脐,我揣著相機(jī)與錄音,去河邊找鬼龙致。 笑死蛀缝,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的目代。 我是一名探鬼主播屈梁,決...
    沈念sama閱讀 38,877評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼榛了!你這毒婦竟也來(lái)了在讶?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,633評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤霜大,失蹤者是張志新(化名)和其女友劉穎构哺,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體战坤,經(jīng)...
    沈念sama閱讀 44,088評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡曙强,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,443評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了湖笨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旗扑。...
    茶點(diǎn)故事閱讀 38,563評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖慈省,靈堂內(nèi)的尸體忽然破棺而出臀防,到底是詐尸還是另有隱情眠菇,我是刑警寧澤,帶...
    沈念sama閱讀 34,251評(píng)論 4 328
  • 正文 年R本政府宣布袱衷,位于F島的核電站捎废,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏致燥。R本人自食惡果不足惜登疗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,827評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嫌蚤。 院中可真熱鬧辐益,春花似錦、人聲如沸脱吱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,712評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)箱蝠。三九已至续捂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宦搬,已是汗流浹背牙瓢。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,943評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留间校,地道東北人矾克。 一個(gè)月前我還...
    沈念sama閱讀 46,240評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像撇簿,于是被迫代替她去往敵國(guó)和親聂渊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子差购,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,435評(píng)論 2 348