Day9 oc建構函式 析構函式及類本質

2021-09-02 13:52:41 字數 1373 閱讀 7946

//new方法做了如下兩件事,一般開發比較少用new,因為分配空間不能選擇其他方式初始化

person *p = [person new];

//1、呼叫+alloc分配儲存空間

person *p1 = [person alloc];

//2、呼叫-init進行初始化

person p2 = [p1 init];

//person *p3 = [[person alloc] init];合起來寫

構造方法用來初始化物件的方法,因此init方法為構造方法。初始化後成員變數值為0。

//重寫-init方法,可以對成員變數賦值,因為子類返回型別不確定(多型),因此寫id型別,id相當於nsobject *萬能指標

-(id)init

return self;

}

自定義構造方法

1、一定是物件方法,以-開頭

2、返回值一般是id型別

3、方法名一般以init開頭

4、父類的屬性呼叫父類方法去處理,如[super initwith***],子類處理自己的

-(id)initwithname:(nsstring *)name andage:(int)age

return self;

}

在物件計數器減為o時,自動呼叫dealloc

-(void)dealloc

類建立的物件為例項物件,實際上類本身也是乙個物件,是個class型別的物件,簡稱類物件。

typedef struct objc_class *class;

person *p1 = [[person alloc] init];

person *p2 = [[person alloc] init];

//獲取記憶體中的類物件

class c1 = [p1 class];

class c2 = [p2 class];

[c1 test];//呼叫類的類方法,相當於[person test]

//或者

class c3 = [person class];

//利用class建立person類物件

//利用person類物件建立person型別的物件

類物件==類名(c3==person),乙個類只有乙個類物件

類的載入和初始化

1、類在程式啟動時,就會載入一次專案中的所有類及分類,且只會載入一次。先載入父類再載入子類。類載入會呼叫類和分類+load。

+(void)load

2、當第一次使用這個類的時候,會呼叫當前類的+initialize方法。先初始化父類再初始化子類。可以監聽類在什麼時候被使用。

+(void)initialize

建構函式 析構函式 虛析構函式

說析構函式之前,先說下建構函式。建構函式用來完成對物件的一系列初始化操作,主要作用有 1.給建立的物件建立乙個識別符號 2.為物件資料成員開闢記憶體空間 3.完成物件資料成員的初始化 當並未顯示的定義建構函式時,會生成乙個預設的建構函式,預設建構函式不能完成物件資料成員的初始化,只能給物件建立一識別...

建構函式 析構函式

是在物件被建立時自動呼叫的函式,將物件初始化為乙個特定的狀態 建構函式的形式 c 11中可以用clock default 來生成預設建構函式 是指類的物件在建立的時候,能使用已有的物件之間初始化它。或者是在類的物件在作為函式形參的時候,或者類的物件在作為函式返回值的時候 作為複製的機制需要自動拷貝型...

析構函式 建構函式

建構函式 一般用於物件的初始化 函式原型 例宣告乙個cperson類 成員變數即成員方法的宣告暫且不加,下同 則其預設生成建構函式原型為 cperson 即必須與類名相同 建構函式特點及使用法則 特點 1.建構函式無返回值 2.函式可以過載 使用者可以自行更改建構函式中的引數,以實現自定義的初始化形...