iOS中的const,static,extern
1.對于const,沒啥說的,如下,修飾了,就算只讀了
int const xyz=123;2.對于static(靜態)
用幾個例子來說:第一個例子
#import "StaticLearn.h"@implementation StaticLearnstatic int lizi = 1;+(int)learn{ return lizi++;}-(int)learn1{ return lizi++;}@end類StaticLearn里面有一個static變量lizi,初始化值為1,類有一個類方法和一個對象方法,我們使用一下看看NSLog(@"%d",[StaticLearn learn]); NSLog(@"%d",[StaticLearn learn]); NSLog(@"%d",[StaticLearn learn]);輸出結果為:2017-02-09 13:41:46.317 UIKitLearn[2919:115349] 12017-02-09 13:41:46.318 UIKitLearn[2919:115349] 22017-02-09 13:41:46.318 UIKitLearn[2919:115349] 3static修飾延長了lizi的生命周期(記得以前看書,好像static修飾會改變變量存儲模式,好像會從棧移到堆,這個考究一下再回來確定)第二個例子
我們用對象方法嘗試:
StaticLearn *sl = [[StaticLearn alloc]init]; NSLog(@"%d",[sl learn1]); NSLog(@"%d",[sl learn1]); NSLog(@"%d",[sl learn1]); sl = nil; sl = [[StaticLearn alloc]init]; NSLog(@"%d",[sl learn1]); NSLog(@"%d",[sl learn1]); NSLog(@"%d",[sl learn1]);我們生成對象,輸出結果為:2017-02-09 13:49:10.108 UIKitLearn[3099:121367] 12017-02-09 13:49:10.108 UIKitLearn[3099:121367] 22017-02-09 13:49:10.109 UIKitLearn[3099:121367] 32017-02-09 13:49:10.109 UIKitLearn[3099:121367] 42017-02-09 13:49:10.109 UIKitLearn[3099:121367] 52017-02-09 13:49:10.109 UIKitLearn[3099:121367] 6寫了這個例子讓我對static修飾的變量存儲位置產生疑問,懂的同學評論給我第三個例子
-(int)learn2{ static int i = 1; return i;}-(int)learn3{ return i;}這樣的寫法是錯誤的,也就是static不能改變i的作用域3.對于extern
按字面理解,外部外來的,那么extern修飾的變量應該是來自外部的,即是其他文件里聲明的變量
這里說下我的使用,具體為什么這樣寫。。。我現在還沒摸清
有兩個類A和B
第一種
在A.m文件里聲明
NSString *haha = @"hello";在B.h或者B.m文件中
extern NSString *haha;在B.m文件中NSLog(@"%@",haha);這樣輸出的即為‘hello’,在B中改變haha的值,A中的值也會同樣變化但我不太明白,為什么在A.h文件中不能聲明,會出現linker錯誤
新聞熱點
疑難解答