下列簡化寫法是ios6.0以後的新寫法
nsnumber
//簡化前的寫法:
nsnumber *value1;
value1 = [nsnumber numberwithint:12345];
value1 = [nsnumber numberwithfloat:123.45f];
value1 = [nsnumber numberwithdouble:123.45];
value1 = [nsnumber numberwithbool:yes];
//簡化後的寫法:
nsnumber *value2;
value2 = @12345;
value2 = @123.45f;
value2 = @123.45;
value2 = @yes;
//裝箱表示式也可以採用類似的寫法:
nsnumber *pioversixteen1 = [nsnumber numberwithdouble: ( m_pi / 16 )];
nsstring *path1 = [nsstring stringwithutf8string: getenv("path")];
//可以分別簡寫為:
nsnumber *pioversixteen2 = @( m_pi / 16 );
nsstring *path2= @( getenv("path") );
//對於字串表示式來說,需要注意的是表示式的值一定不能是null,否則會丟擲異常。
nsarray
//對於nsarray的初始化來說,有非常多的寫法,這裡就不再一一羅列,我們直接看新的寫法
nsarray *array;
array = @; //空陣列
array = @[ a ]; //乙個物件的陣列
array = @[ a, b, c ]; //多個物件的陣列
//編譯器在處理時:
array = @[ a, b, c ];
//編譯器生成的**:
id objects = ;
nsuinteger count = sizeof(objects)/ sizeof(id);
array = [nsarray arraywithobjects:objects count:count];
//注意,如果a,b,c物件有nil的話,執行時會丟擲異常,這點和原來的處理方式不同,編碼的時候要多加小心。
nsdictionary
//同樣,對於字典這個資料結構來說,有很多種初始化的方式,我們來看新的寫法:
nsdictionary *dict;
dict = @{}; //空字典
dict = @; //包含乙個鍵值對的字典
dict = @; //包含多個鍵值對的字典
//採用上述寫法構建的容器都是不可變的,如果需要生成可變容器,可以傳遞-mutablecopy訊息。例如
nsmutablearray *mutableplanets = [@[
@"mercury", @"venus", @"earth",
@"mars", @"jupiter", @"saturn",
@"uranus", @"neptune"
] mutablecopy];
nsmutabledictionary *dic=[@ mutablecopy];
物件初始化
在oc中使用alloc後,會分配到一塊記憶體塊,同時這塊記憶體塊會被清零,所以初始化函式init是不需要再做置零的操作的。在oc中,應該在alloc後就呼叫初始化函式init,使用new可以達到這個效果,但new不是oc的風格。物件在init時,應該先使用其父類的init,然後再使用自己的init行...
物件初始化
我們知道當使用new關鍵字建立乙個物件的時候,會呼叫相應的建構函式對該物件進行初始化,那麼這個過程中到底都還有什麼事情呢?先看一段 當執行語句 student stu new student zhangsan 17 執行該語句的時候在記憶體中程式都做了什麼事情,讓我們一一枚舉出來 1 因為new用到...
物件初始化
每乙個物件都應該在建立之時就有確定的內容,否則就失去了物件的意義了。定義乙個物件,在系統為其分配記憶體時,應該同時對有關的資料成員賦初始值。首先,不能在類宣告中對資料成員初始化。因為類不是實體,而是抽象型別,不占用記憶體而無處容納資料。如果類中資料為私有或受保護的,則不能在定義物件時賦初值。time...