OC -- extern、static、const的使用

前一陣子,做項目的時候到網上找Demo,打開運行的時候發現其中變量前有關鍵字extern和static,所以我研究了一下子

 對於extern來說可以理解爲擴展吧是這樣的是從一個類擴展到另一個類中的

在SplashViewController.m中定義一個變量是這樣的

#import "SplashViewController.h"

NSString* meString=@"123";

@implementation SplashViewController

// NSString* meString=@"123";

.................

這兩 個地方都行

 

如果在另外的類iTennisViewController.m中要用到這個類中的meString時只需在iTennisViewController.m中寫成這樣

#import "iTennisViewController.h"

extern NSString* meString;

@implementation iTennisViewController

即可

這樣你在iTennisViewController.m中直接打印meString,你會發現 是123,當然你也可以對meString重新斌值 ,就是說meString雖然定義在SplashViewController.m中但好像是公共的,也稱爲全局變量吧

對於static修飾的變量

#import "SecondViewController.h"

static int count;

@implementation SecondViewController;

.......

-(void)viewWillAppear:(BOOL)animated

{

    [super viewWillAppear:animated];

     NSLog(@"viewWillAppear is %d",count);

    count+=1;

}

這樣你每進入一次界面就會發現count加1

除非程序完全退出重啓,count纔會清除,objective-c中用static修飾的變量和java中的靜態變量是有區別的,其不能通過類名直接訪問,當然你想直接訪問也是能實現的在.m中寫一個類方法反回count就行了,而且其作用域是其本類,不能擴展到其他類中


對於C/C++語言來講, 
const就是隻讀的意思,只在聲明中使用; 
static一般有2個作用,規定作用域和存儲方式.對於局部變量,static規定其爲靜態存儲方式,每次調用的初始值爲上一次調用的值,調用結束後存儲空間不釋放; 
對於全局變量,如果以文件劃分作用域的話,此變量只在當前文件可見;對於static函數也是在當前模塊內函數可見. 
static const 應該就是上面兩者的合集. 
下面分別說明: 
全局: 
const,只讀的全局變量,其值不可修改. 
static,規定此全局變量只在當前模塊(文件)中可見. 
static const,既是隻讀的,又是隻在當前模塊中可見的. 
文件: 
文件指針可當作一個變量來看,與上面所說類似. 
函數: 
const,返回只讀變量的函數. 
static,規定此函數只在當前模塊可見. 
類: 
const,一般不修飾類,(在VC6.0中試了一下,修飾類沒啥作用) 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章