OC基礎7 變數和資料型別

2021-07-03 16:21:14 字數 3328 閱讀 2340

1、有時候初始化需要讓物件帶有初始值,那麼可以定義另乙個初始化方法來使用,比如:

-(xclass *) initwith: (int) n

return self;

}這個方法的意思是:首先用父類的init方法先把物件初始化,然後用if(self)判斷是否初始化成功(初始化成功則self不為空,判斷條件成立;注意沒初始化的話,self的值是空的),成功則使用賦值方法給物件賦值,那麼這就是乙個帶賦值的初始化方法了。

同時為了方便使用,甚至可以再進一步過載init方法,如下:

-(instancetype) init

那麼當使用init方法的時候,就會自動使用過載過的方法,給物件賦初始值0。方法的返回型別instancetype表示未確定具體返回型別,因為你不知道使用過載過的init方法的會是哪乙個繼承後的類。過載init方法有乙個標準模板,如下:

-(instancetype) init

return self;

}2、關於幾種變數的理解:

(1)、區域性變數:語句塊內部的變數,比如方法內部的變數,當方法執行的時候才存在。區域性變數預設初始化為nil,它們是沒有「記憶力」的,比如方法的區域性變數,每次方法返回後,它們的值就消失了,重新呼叫方法的時候,這些區域性變數都會重新初始化以此。方法的引數也是區域性變數;

(2)、例項變數:即是物件所包含但不屬於某個方法的變數,在多個不同方法呼叫的過程中會保持自己的值,在物件存在的過程中例項變數一直跟隨存在。不同的物件都會有自己的一套例項變數,哪怕它們是同個類的;

(3)、靜態變數:用static修飾的變數是為靜態變數,它的值會一直存在,甚至可以跨越不同的例項,即是說,不同的例項可以去修改它的值,並且會共同累加;

(4)、全域性變數:在檔案中所有方法和類之外的地方定義的變數,在這個模組中任何位置都可以引用這個變數的值。全域性變數一般以g開頭;

(5)、外部變數:當你訪問其他檔案定義的全域性變數的時候,那麼這個全域性變數對你來說就是外部變數,你需要先把它宣告一遍,使用語法類似:

externint g***;

然後才可以給它賦值使用,不能在宣告後立刻跟上等號進行賦值,會報錯。

3、如果使用static把全域性變數宣告為靜態變數,則只有這個檔案中在這個宣告語句後面的方法可以訪問這個變數,其他檔案中的方法就訪問不了。

4、關於屬性和例項變數:

(1)、屬性是指用@property和@synthesize宣告過的變數,這些屬性可以直接用點運算子代替setter方法和getter方法;而例項變數必須配合setter方法和getter方法才能訪問,沒法直接訪問;

(2)、宣告屬性之後會自動生成對應的例項變數(不過**沒有顯式地表達處理)。如果只使用@property而沒有使用@synthesize,那麼***對應的例項變數是_***,注意是有下劃線的。

5、關於列舉資料型別:

(1)、列舉資料型別使用enum來定義,如語句:

enum flag ;

定義了資料型別flag,而宣告為flag型別的變數只能有兩個值,true或者false。宣告稱列舉資料型別的格式如下:

enum flag ***;

注意enum仍然要跟著;

(2)、列舉資料型別裡的各個識別符號,其實是被編譯器當做整型數來處理,第乙個識別符號被賦值為0,接下來的依次遞增。在**中有主動賦值的識別符號,可以改變預設的遞增值,沒有主動賦值的,會根據前乙個值遞增,如下:

enum direction ;

四個值依次被賦值為0、1、10、11;

(3)、不同的識別符號可以共享同乙個值,如下:

enum boolean ;

(4)、定義乙個列舉資料型別month,分別把十二個月對應為12個整數,那麼假設有如下**:

enum month thismonth;

thismonth = december;

那麼以下**是可以執行的,即是可以直接把識別符號當做整型數來運算:

lastmonth = (enum month) (thismonth – 1);

(5)、可以在宣告列舉資料型別的時候不給它命名,同時直接宣告乙個該型別的變數,如下:

enum direction;

並沒有指定這個列舉型別的名稱,同時直接宣告了乙個此型別的變數direction。

6、關於typedef語句:typedef語句用來給已有的資料型別指派另乙個名稱,可以增加**的可讀性。比如某個整型的變數n在程式中是要用作計數器,那麼可以用以下**:

typedef int counter;

那麼當使用counter n來宣告n 的時候,就能很清晰知道n是要用作計數器,雖然這個語句的效果是和int n一樣的。

7、在表示式求值中的資料遵守以下的轉換規則:不同型別的運算元在運算時,會統一轉換成精度高的型別進行運算,計算出來的結果也是高精度的型別。以下的資料型別中越靠前的精度越高:

(1)、long double

(2)、double

(3)、float

(4)、long long int

(5)、long int

(6)、int

(7)、bool、char、short int、bit field、enum

注意:第(7)的資料型別在運算時全部會轉換成int型別。

8、位運算子:

(1)、位運算子可以處理任何型別的整型值,但不能處理浮點數。資料會被轉化為二進位制表示法進行運算;

(2)、與運算(&):兩個二進位制數相對應的位置進行運算,只有當兩個數對應位置都為1時結果才為1,其他情況都為0。即是and運算;

(3)、或運算(|):兩個二進位制數相對應的位置進行運算,只有當兩個數對應位置都為0時結果才為0,其他情況都為1。即是or運算;

(4)、異或運算(^):相同為0,相反為1。xor運算;

(5)、一次求反運算(~):所有的位的值全部反過來;  

(6)、向左移位運算(<<):所有位向左移一位,超出資料項的高位的位將丟失,低位移入的位值為0;

(7)、向右移位運算(>>):把值向右移一位,低位的資料將丟失。對於無符號的數,左邊移入的值為0。對於有符號的數,如果最左邊的位為0(正數),移入的也會是0,如果左邊的數是1(負數),有些計算機會移入1(算術右移),有些計算機會移入0(邏輯右移)。

(8)、demorgan規則:~(~a&~b) == a|b,~(~a|~b) == a&b。

Objective C基礎 變數和資料型別

1.控制例項變數作用域的指令 我們知道例項變數的作用域只限於為該類定義的例項方法。因此,任何例項方法都能通過變數名來訪問該類的例項變數,而無需進行特殊操作。在介面中宣告的例項可通過子類進行繼承。繼承來的例項變數同樣可以通過變數名在該子類定義的方法中直接訪問。在介面部分宣告例項變數時,可通過以下指令來...

變數和資料型別

1.識別符號只能包含字母,數字和下劃線。變數名可以用字母或下劃線開頭,數字不行。如 day 0401 但不能是0401 day 以下劃線開頭的識別符號是有特殊意義的。以單下劃線開頭 foo 的代表不能直接訪問的類屬性,需通過類提供的介面進行訪問,不能用 from import 而匯入 以雙下劃線開頭...

變數和資料型別

變數和資料型別 變數的定義 乙個儲存空間的表示,其值是可以發生變化的。常量的定義 乙個儲存空間的表示,其值是不可以發生變化的。房間 變數 房間名字 變數名 房間型別 變數型別 入住的客人 變數值 通過記憶體中小房間的別名找到資料儲存 通過變數名可以簡單快速地找到它儲存的資料 常見的資料型別 數值型 ...