------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流!
-------
枚舉數據類型可以爲只存儲一些值的鏈表這種數據類型定義名稱。Objective-C語言的typedef語句允許你爲內置或派生的數據類型指定自己的名稱。
對象的初始化
常見的編程習慣是類中所有的初始化方法都以init開頭。
如果希望在類對象初始化時做一些事情。可以通過覆寫init方法達到這個目的。
-(id)init
{
self = [super init];
if (self) {
//初始化代碼
}
return self;
}
必須將父類init方法的執行結果賦值給self,因爲初始化過程改變了對象在內存中的位置(意味着引用將要改變)。如果父類的初始化過程成功,返回的值是非空的,通過if語句可以驗證,註釋說明可以在這個代碼塊的位置放入自定義的初始化代碼。通常可以在這個位置創建並初始化實例變量。
注意,init被定義爲返回id類型,這是編寫可能會被繼承的類init方法的一般規則。
程序開始執行時,它向所有的類發送initialize調用方法。如果存在一個類及相關的子類,則父類首先得到這條消息。該消息只向每個類發送一次,並且向該類發送其它任何消息之前,保證向其發送初始化消息。
作用域:
在接口中聲明的實例變量可以通過子類進行繼承。
可以把下面指令放在實例變量之前,以便更精確地控制其作用域:
1) @protected,可以被類及任何子類中定義的方法直接訪問。在接口部分定義的實例變量默認是這種作用域。
2)@private,只能本類訪問,不能被子類直接訪問。在實現部分定義的實例變量默認屬於這種作用域。
3)@public,可以被本類、其他類或者模塊中定義的方法直接訪問。
4)@package,對於64位映像,可以在實現該類的映像中的任何地方訪問這個實例變量。
@public指令使得其他方法或函數可以通過使用指針運算符(->)訪問實例變量。但,實例變量聲明爲public並不是良好的編程習慣,因爲這違背了數據封裝的思想(即一個類需要隱藏它的實例變量)。
關於屬性、存儲方法和實例變量:
編碼規範(Xcode4已經採用的)目前的趨勢是使用下劃線(_)作爲實例變量名的起始字符。
@synthesize window = _window;
表明合成(synthesize)屬性window的取值方法和設置方法,並將屬性與實例變量_window(實例變量並沒有顯性聲明)關聯起來。這對區別屬性和實例變量的使用是有幫助的。
[window makeKeyAndVisible]; //錯誤
[_window makeKeyAndVisible];//正確
[self.window makeKeyAndVisible];//正確
全局變量:
在程序的開始處(所有的方法、類定義)編寫一下語句:
int gMoveNumber = 0;
那麼這個模塊中的任何位置都可以引用這個變量的值。這種情況下,我們說gMoveNumber被定義爲全局變量。
按照慣例,用小寫的g作爲全局變量的首字母。
外部變量是可被其他任何方法或函數訪問和更改其值的變量。在需要訪問外部變量的模塊中,變量聲明和普通方式一樣,只是需要在聲明前加上關鍵字extern。
使用外部變量時,必須遵循下面這條重要的原則:變量必須定義在源文件中的某個位置。即在所有的方法和函數之外聲明變量,並且前面不加關鍵字extern,如:int gMoveNumber;
確定外部變量的第二種方式是在所有的函數之外聲明變量,在聲明前面加上關鍵字extern,同時顯式地爲變量指派初始值。
記住,聲明不會引起分配變量的內存空間,而定義會引起變量內存空間分配。
處理外部變量時,變量可以在許多地方聲明爲extern,但是隻能定義一次。
注意,如果變量定義在包含訪問該變量的文件中,那麼不需要單獨進行extern聲明。(這個意思是,可能你import了)
靜態變量:
在方法之外定義的變量不僅是全局變量,而且是外部變量。如果希望定義全局變量且只在特定模塊(文件)中是全局的,就可以使用static來修飾。
注意,重載alloc並不是好的編程實踐,因爲這個方法處理內存的物理分配。
枚舉數據類型:
枚舉數據類型的定義以關鍵字enum開頭,之後是枚舉數據類型的名稱,然後是標識符序列(包含在一對花括號內),它們定義了可以給該類型指派的所以的允許值。
在代碼中定義的枚舉類型的作用域限於塊的內部。另外,在程序的開始及所有塊之外定義的枚舉數據類型對於該文件是全局的。
定義枚舉數據類型時,必須確保枚舉標識符與定義在相同作用域之內的變量名和其他標識符不同。
typedef語句:
通俗點說就是別名。
數據類型轉換:
Bool,char,short int,bit field,枚舉和int都轉爲int型,其他的強轉爲誰就是誰。
位運算符就不囉嗦了。