1,先說定義
1)成員變量定義:生存與該類的生命周期掰烟,變量存活周期跟你定義的該類實(shí)體對(duì)象一樣爽蝴;作用域是整個(gè)實(shí)體對(duì)象;可以在h文件中聲明或者在m文件中@implementation上面添加的
#import “S1ViewController.h”
@interface S1ViewController ()
//這里做聲明
@end
@implementation S1ViewController
@end
舉例:S1ViewController.h文件中定義
@interface S1ViewController : UIViewController
{
NSString* sttr2;//S1ViewController實(shí)體對(duì)象的成員變量
}
@property(nonatomic,retain) NSString* sttr2;//定義點(diǎn)語法的快捷操作setter 與 getter方法
@end
注明:在h文件中定義的變量纫骑,在外部可見
.h聲明了類蝎亚,相當(dāng)于java的接口,在這里interface塊外聲明的函數(shù)和屬性都是外部可見的先馆,但是在塊內(nèi)的貌似是私有的
.m里面的所有東西都是對(duì)外封閉的這樣就是有效的源碼的開源與閉源发框;
2)全局變量
定義:在@implementation外定義的變量(在@implementation中定義也是可以但是一般不這么干)
舉例:
//規(guī)范的
staticinthu=3;//全局變量
NSString*sttr1=@”S1ViewController”;//全局變量
@implementationS1ViewController
@end
//不規(guī)范的
@implementation S1ViewController
static int hu=3;//全局變量
NSString*sttr1=@”S1ViewController”;//全局變量
@end
全局變量分為兩種:
1)static修飾的也稱私有全局變量,只在該源文件中可用
學(xué)習(xí)過Java 或者 C 語言的朋友應(yīng)該很清楚static關(guān)鍵字吧煤墙?在某個(gè)類中聲明一個(gè)static 靜態(tài)變量梅惯, 其他類中想使用它或者修改它不用new 這個(gè)對(duì)象 ,直接使用它的類名方可直接拿到這個(gè)靜態(tài)變量的對(duì)象番捂,遍可以在其他類中任意修改這個(gè)變量的數(shù)值个唧。它是存于全局變量區(qū),生命周期和程序相同设预,static只在聲明的類中可見。
在聲明的類中結(jié)束后犁河,再次使用還是之前的值鳖枕。
在Objective-C 的語法中聲明后的static靜態(tài)變量在其他類中是不能通過類名直接訪問的,它的作用域只能是在聲明的這個(gè).m文件中 桨螺。不過可以調(diào)用這個(gè)類的方法間接的修改這個(gè)靜態(tài)變量的值
static關(guān)鍵字聲明的變量須放在implementation外面宾符,或者方法中,如果不為它賦值默認(rèn)為0灭翔,它只在程序開機(jī)初始化一次(并不是該類實(shí)例化后才初始化的)
將static靜態(tài)變量寫在方法中魏烫,它的初始化也是在程序開機(jī)時(shí),程序一旦啟動(dòng)以后static是不能在創(chuàng)建的肝箱。所以程序在這里調(diào)用了5次這個(gè)方法哄褒,sCount的值并沒有因?yàn)橹匦聞?chuàng)建static sCount而改變,而是將sCount的值一直存在內(nèi)存中煌张。
2)沒有static修飾的 呐赡,在任何源文件中都可以用,注意:定義沒有static的全局變量骏融,命名一定要很獨(dú)特链嘀,才能區(qū)分與其他源文件中的全局變量萌狂,如果出現(xiàn)跟其他源文件同名的全局變量,則會(huì)報(bào)錯(cuò)誤
例如:
NSString*sttr1=@”S1ViewController”;//全局變量
在其他文件如果要用該全局變量怀泊,在前面加externNSString*sttr1茫藏;即可使用了