物件型別新初始化方法

2021-07-10 17:53:08 字數 1679 閱讀 1034

下列簡化寫法是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...