在某個類中聲明一個static 靜態(tài)變量, 其他類中想使用它或者修改它不用new 這個對象 袱讹,直接使用它的類名方可直接拿到這個靜態(tài)變量的對象,便可以在其他類中任意修改這個變量的數(shù)值。
static靜態(tài)變量在其他類中是不能通過類名直接訪問的僵朗,它的作用域只能是在聲明的這個.m文件中 席纽。不過可以調用這個類的方法間接的修改這個靜態(tài)變量的值捏悬。
MyClass.h
警告:??static 寫在interface外面編譯是沒有錯誤的,但是編譯器會報警告润梯,這么說這樣的寫法是不被編輯器認可的过牙。
錯誤:static 寫在interface里面會直接報錯甥厦,顯然這樣的語法是不被認可的。
+(void) addCount;??各位盆友們注意一下這法方法前面的+號寇钉。 它的意思是標致這個方法為靜態(tài)方法刀疙,標志+號后不用創(chuàng)建這個對象通過類名可以直接調用這個靜態(tài)方法。 而之前方法前用過的-號扫倡,標志-號后的方法必須通過本類的對象或者在本來中才可以使用谦秧。
[objc]view plaincopy
#import?
//警告
//static?int?sCount?;
@interfaceMyClass?:?NSObject
{
//錯誤的寫法
//static?int?sCount;
}
+(void)?addCount;
@end
MyClass.m
static關鍵字聲明的變量必須放在implementation外面,或者方法中撵溃,如果不為它賦值默認為0疚鲤,它只在程序開機初始化一次。
+(void)addCount 因為標識了+號缘挑,所以這個方法無需使用這個類的對象調用集歇。直接使用類名方可調用這個方法。
[objc]view plaincopy
#import?"MyClass.h"
staticintsCount??=100;
@implementationMyClass
+(void)addCount
{
sCount?++;
NSLog(@"靜態(tài)整型變量的值為:%d",?sCount);
}
@end
main.m
無需alloc這個對象语淘,直接使用MyClass類名方可直接調用addCount方法诲宇。
[objc]view plaincopy
#import?"MyClass.h"
intmain(intargc,charchar*argv[])
{
NSAutoreleasePool*pool?=?[[NSAutoreleasePoolalloc]init];
//添加我們的測試代碼
[MyClassaddCount];
intretVal?=?UIApplicationMain(argc,?argv,nil,nil);
[poolrelease];
returnretVal;
}
運行這個程序,初始化賦值為100 惶翻,調用方法的時候++姑蓝,所以打印出來的數(shù)值為101。
MyClass.m
將static整型變量定義在方法中吕粗,并且為其賦值100纺荧。
#import "MyClass.h"
@implementation MyClass
+(void)addCount
{
static int sCount??= 100;
sCount ++;
NSLog(@"靜態(tài)整型變量的值為:%d", sCount);
}
@end
main.m
循環(huán)5次調用這個方法,看看結果是什么樣字溯泣,結果肯定是101吧虐秋。。
#import
#import "MyClass.h"
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
//添加我們的測試代碼
for (int i =0; i < 5; i++) {
[MyClass addCount];
}
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
程序員不要相信任何人說的任何有關程序的話垃沦,一定相信自己客给,相信自己眼睛看到的一切,哇咔咔~~
可見即使將static靜態(tài)變量寫在方法中肢簿,
它的初始化也是在程序開機時靶剑,程序一旦啟動以后static是不能在創(chuàng)建的。
所以程序在這里調用了5次這個方法池充,sCount的值并沒有因為重新創(chuàng)建static sCount而改變桩引,而是將sCount的值一直存在內(nèi)存中。