前一陣子,做項目的時候到網上找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中試了一下,修飾類沒啥作用)