OC 核心語法2 構造方法

2022-08-04 19:36:14 字數 1831 閱讀 2189

定義:用來初始化物件的方法,是個物件方法。 - 開頭

目的:為了讓物件建立出來,成員變數就擁有固定值(預設是空,0)

注意點:(1)先呼叫父類的構造方法(eg:[super init])

(2)再進行子類內部成員變數的初始化

(1)分配儲存空間:使用     +alloc 給物件分配空間 (返回乙個分配了空間的物件,但是沒有初始化)
eg:

person *p1 = [person alloc];
(2)初始化 使用 -init 初始化物件

eg:

person *p2 = [p1 init];
以上可以歸納為 person *p3 = [[person alloc] init]; // init 是個構造方法,屬於nsobject類中

1>範例

- (id)init // 返回值一定要是id  

// 3.返回乙個已經初始化了的物件

return self;

/* 簡寫:

if( self = [super init])

return self;

*/

}

注:在呼叫時,先賦值父類成員變數,一層層往下賦值,從nsobject開始。

2> 執行過程:

解釋:第一步:呼叫student物件,在對student物件進行初始化的時候,會呼叫父類的init方法,也就是person類的init。

第二步:初始化person物件的init方法,會呼叫父類的init,也就是nsobject類的init方法。

第三步:初始化nsobject類的init方法,此方法會有個指標isa指向student類,nsobject類的init方法初始化完畢。

第四步:nsobject類的init方法初始化完畢後,此時person類的init方法就會有值,person類的init方法初始化完畢。

第五步:person類的init方法初始化完畢後,就會初始化student類的init方法。

注:student初始化時呼叫person的init方法。person初始化時呼叫nsobject的init方法。

賦值順序:首先賦值isa,然後再賦值_age,最後初始化_no(從父類開始賦值)

初始化順序:1>先初始化父類,然後再初始化子類。但是呼叫的時候先呼叫子類的方法,再呼叫父類方法

2>先初始化自身的isa,然後再初始化其它成員變數。

規範:(1)一定是物件方法,一定以 - 開頭。(呼叫某個物件方法進行初始化)

(2)返回值一定是id型別

(3)方法名一般是以init開頭。

(4)成員變數數量:自有成員變數加父類成員變數。(nsobject預設有成員變數isa)

eg:

- (id)initwithage:(int)age // 設定age的初始化方法  

return self;

}

int main()  

原則:父類的成員變數父類處理,子類的成員變數子類處理。

(1) new 是分兩步來生成物件的

1> 呼叫+alloc 方法來給物件分配記憶體空間

2>呼叫-init 方法給物件的成員變數初始化成預設的值

缺點:不能在建立物件的同時進行一些必要的初始化值

(2)alloc、init方法

優點:可以在物件初始化時,使成員變數擁有必要的初始化值

OC課程筆記總結8 核心語法3 構造方法

課程 核心語法 首先必須理解兩個重要的內容 1,self,2,super self,永遠指向的是當前的物件,而判斷當前物件到底是哪乙個是通過最外層的中括號中是哪乙個物件,而不是某個方法或者屬性所屬於的類或者物件。這一點體現在 self super init 中,super是指呼叫父類的方法init,...

oc構造方法

一 構造方法的呼叫 完整的建立乙個可用的物件 person p person new new方法的內部會分別呼叫兩個方法來完成 2件事情,1 使用 alloc 方法來分配儲存空間 返回分配的物件 2 使用 init 方法來對物件進行初始化。可以把new 方法拆開如下 1.呼叫類方法 alloc 分配...

oc構造方法

主題 exam self 是訊息傳送者,不要簡單理解為物件 self super init if self return self 下圖為isa截圖 在物件處打一斷點可到如下內容,isa是指標,指向類方法 void setage等 在init構造實現賦值和輸出 需要有賦值方法和輸出方法 例如 set...