OC語言細節總結

1. OC中對象命名都是以指針的形式,因爲OC中對象是不能壓棧的!所以,不能定義一個對象,只能定義一個指向對象的指針。OC中的對象都是存在於堆中的,用一個指針指向該空間。因爲在壓棧的時候需要知道對象的大小,而在OC中繼承關係是在運行的時候才關聯的,所以程序在編譯的時候不知道壓棧空間爲多大。像C++,它是靜態語言,在編譯的時候就會關聯繼承關係,所以C++中對象都是壓棧的。同樣,在OC中sizeof宏是不能計算對象大小的,因爲該宏是在預編譯的時候計算大小的,這個時候對象大小是沒法獲得的,但是在C++中可以。這也是C++編譯比OC慢很多的原因!

2. OC中數組和字典存儲的都是對象的地址,有些對象的地址可能會存在多個字典或者數組中,當在一個當中改變對象的值的時候,另一個數組或者字典中對象的值也會發生改變。

3. [屬性 @property,@synthesize簡析]

@property關鍵字

//聲明一個屬性,相當於聲明瞭下面兩個方法

@property NSString * name;

//- (void)setName:(NSString *)name;

//- (NSString *)name;

@synthesize name = _name;(綁定set和get方法所操作的字段)

//Xcode4.6以前,需要這樣實現,如同實現了下面兩個方法

//Xcode4.6起,無需寫synthesize,自動實現下面兩個方法,會自動關聯名位_XXX的變量

//如果類中並沒有對應的變量,會自動生成相應的變量_XXX。

關鍵在於:假設你自己在類中聲明瞭一個name字段,這時類中會有兩個字段一個是你自己創建的name,另一個是屬性自己創建的_name字段。如果你聲明的是name,可以這麼寫讓get和set方法操作的是name而不是_name(@synthesize name = name;),這樣類中只有一個字段(name), 而不存在(_name)了。

4. 匿名類別作用:

<1>.聲明私有化的成員變量(替代方法:聲明在實現部分)

<2>.前置聲明私有化的成員方法(現在私有化的成員方法可以不前置聲明)

<3>.聲明私有化的屬性

5ARC與非ARC轉化

<1>.將不使用ARC的代碼轉成ARC代碼

Edit —> Refactor —> Convert to ARC

<2>.ARC非ARC混編

//同一個工程中,部分文件使用ARC,部分文件不使用ARC。

Build phase -----> Complie Source

-fno-objc-arc

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章