詳解Objective-C中變量和數(shù)據(jù)類型
Objective-C中變量和數(shù)據(jù)類型是本文要介紹的內(nèi)容,很詳細(xì)的從類的初始化、作用域回顧(變量的一些內(nèi)容)、數(shù)據(jù)類型的匯總等來講述內(nèi)容,本文認(rèn)為本文非常適合初學(xué)者來參考,我們先來看詳細(xì)內(nèi)容詳解。
一、類的初始化
編寫初始化時(shí),遵循兩個(gè)策略:如果你的類包含多個(gè)初始化方法,其中一個(gè)就應(yīng)該是指定的(desigrated)初始化方法,并且其他所有初始化方法都應(yīng)該使用這個(gè)方法。通常,它是最復(fù)雜的初始化方法(一般是參數(shù)最多的初始化方法)。通過創(chuàng)建指定的初始化方法,可以把大部分初始化代碼集中到單個(gè)方法中。然后,任何人要想從該類派生子類,就可以重載這個(gè)指定的初始化方法,以便保證正確地初始化新實(shí)例。
二、作用域回顧
1、控制實(shí)例變量作用域的指令
在接口部分聲明實(shí)例變量時(shí),可以指一下三個(gè)指令放在實(shí)例變量之前,以便更精確地控制類作用域
(1)protected——這個(gè)指令后面的實(shí)例變量可被該類及任何子類中定義的方法直接訪問。默認(rèn)。
(2)private——這個(gè)指令后面的實(shí)例變量可被定義在該類的方法直接訪問,但是不能被子類中定義的方法直接訪問。
(3)public——這個(gè)指令后面的實(shí)例變量可被該類中定義的方法直接訪問,也可被其他類或模塊中定義的方法直接訪問。
(4)package——對于64位圖像,可以在實(shí)現(xiàn)該類的圖像的任何地方訪問這個(gè)實(shí)例變量。
如:
- @interface Printer:NSObject
- {
- @private
- int pageCount;
- int tonerlevel; //任何從Printer派生子類的人都無法訪問它
- @protected
- //other instance variables //可被子類訪問,可被Printer類訪問
- }
- ……
- @end
@public指令使得其他方法或函數(shù)可以通過使用指針運(yùn)算符(->)訪問實(shí)例變量。
2、外部變量
如果在程序的開始處(所以方法、類定義和函數(shù)定義之外)編寫的變量語句,那么這個(gè)模塊中的任何位置都可以引用這個(gè)變量的值。——全局變量:慣例,用小寫g作為全局變量首字母;外部變量。如:int fMoveNumber;
外部變量是可被其他任何方法或函數(shù)訪問和更改其值的變量,在需要訪問外部變量模塊中,變量聲明和普通方式一樣,只需加上extern。要告知系統(tǒng)訪問其他文件中定義的全局變量。如:extern int gMoveNumber;
3、靜態(tài)變量
除了特定類中的方法,再?zèng)]有其他方法需要訪問這個(gè)特定變量??梢栽诎@個(gè)特定類的實(shí)現(xiàn)的文件中將該變量定義為static。如:static int gGlobalVar = 0;
三、存儲(chǔ)類說明符
1、auto
聲明一個(gè)自動(dòng)局部變量。函數(shù)或方法內(nèi)部變量的默認(rèn)聲明方式。如:auto int index;——int index;
靜態(tài)變量有默認(rèn)初始值0,自動(dòng)變量沒有。
2、const
對程序中值不變的變量設(shè)置const特性,不可更改其值,必須初始化。如:const double pi = 3.141592654;
3、volatile
指定類型變量的值會(huì)改變(與const相反)。為了防止編譯器優(yōu)化掉看似多余的變量賦值,同時(shí)避免重復(fù)地檢查值沒有變化的變量。如:
- volatile char *outPort;
- *outPort = '0';
- *outPort = 'N';
防止第一個(gè)賦值語句從程序中刪除。
四、枚舉數(shù)據(jù)類型(enum)
將一系列值指派給一個(gè)變量。
enum 枚舉數(shù)據(jù)類型的名稱 標(biāo)識(shí)符序列(包含在一對花括號(hào)內(nèi))
如:
- enum flag{false,true};
- enum flag endOfData,matchFound;
可指派true、false給這兩個(gè)變量
如果希望一個(gè)枚舉標(biāo)識(shí)符對應(yīng)一個(gè)特定的整數(shù)值,那么可以在定義數(shù)據(jù)類型時(shí)給該標(biāo)識(shí)符指定整數(shù)值。在列表中一次出現(xiàn)的枚舉標(biāo)識(shí)符被指派了以特定整數(shù)值開始的序列數(shù)。
如:
- enum direction{up,down,left=10,right};
- up=0,down=1,left=10,right=11
枚舉標(biāo)識(shí)符可以共享相同的值。如:
- enum boolean{no=0,false=0,yes=1,true=1};
可以明確地給枚舉類型的變量指派一個(gè)整數(shù)值,使用類型轉(zhuǎn)換運(yùn)算符。如:
- lastMonth=(enum month)(monthValue=-1);
將枚舉當(dāng)做獨(dú)立的數(shù)據(jù)類型。
定義枚舉數(shù)據(jù)類型時(shí),可以省略數(shù)據(jù)類型名稱,可以將變量聲明作為特定枚舉數(shù)據(jù)類型中的一個(gè)。如:enum {east,west,south,north} direction;
定義枚舉數(shù)據(jù)類型時(shí),必須確保枚舉標(biāo)識(shí)符與定義在相同作用域內(nèi)的變量名和其他標(biāo)識(shí)符不同。
五、typedef語句
為數(shù)據(jù)類型另外指派一個(gè)名稱。如:typedef int Counter;——int=Counter
六、數(shù)據(jù)類型轉(zhuǎn)換
1、轉(zhuǎn)換規(guī)則
(1)一個(gè)操作數(shù)是long double型,則另一個(gè)操作數(shù)被轉(zhuǎn)換為long double型,計(jì)算結(jié)果也是。
(2)一個(gè)操作數(shù)是double型,則另一個(gè)操作數(shù)被轉(zhuǎn)換為double型,計(jì)算結(jié)果也是。
(3)一個(gè)操作數(shù)是float型,則另一個(gè)操作數(shù)被轉(zhuǎn)換為float型,計(jì)算結(jié)果也是。
(4)一個(gè)操作數(shù)是_Bool、char、short int、bit field或枚舉數(shù)據(jù)類型,則全部轉(zhuǎn)為int型。
(5)一個(gè)操作數(shù)是long long int型,則另一操作數(shù)轉(zhuǎn)化為long long int型,計(jì)算結(jié)果也是這種類型。
(6)一個(gè)操作數(shù)是long int型,則另一操作數(shù)轉(zhuǎn)換為long int型,計(jì)算結(jié)果也是這種類型。
(7)均為int型,計(jì)算結(jié)果也是。
2、符號(hào)擴(kuò)展
只要將有符號(hào)int或short int轉(zhuǎn)換成更多字節(jié)的整數(shù),在執(zhí)行轉(zhuǎn)換的過程中符號(hào)位就會(huì)擴(kuò)展至左側(cè)。
一些計(jì)算機(jī)上,字符是作為有符號(hào)的量處理的。將字符轉(zhuǎn)換為整數(shù)時(shí),會(huì)發(fā)生符號(hào)擴(kuò)展。
小結(jié):詳解Objective-C中變量和數(shù)據(jù)類型的內(nèi)容介紹完了,希望本文對你有所幫助!