OC中的構造法

2021-07-01 19:27:05 字數 2377 閱讀 3184

在我們oc中經常用到這樣乙個東西,即建立乙個物件,例如,person *p = [person new];我們知道這是乙個建立物件並且分配儲存空間、初始化的過程。首先當呼叫new時首先可以返回乙個alloc 方法,這方法就會給我們在記憶體分配乙個儲存空間來儲存我們新建的物件,即person *p=  [person alloc];然後我們的物件還有初始化,這時就要呼叫乙個物件方法來做初始化,即

person *p = 

[p init ]。實質上就是這樣,

person *p = [[person alloc] init]。

這就是我們的構造方法,它就是用來初始化我們的物件的方法。

在我們程式設計的過程中,我們經常會遇到這種情況,比如,我們建立乙個學生的分數物件,建立之後我們要求分數,即初始化後就有分數。這時就可以用到我們的構造方法來給它初始化後馬上就有乙個預設值(不操作,它們的預設值為0)。那麼我們就需要重寫init,即重寫初始化值。

在重寫之前我們先了解乙個資料型別,「id」。「id」就是乙個不限型別的物件資料型別。那麼下面即重寫init。

- (id)init  // 給姓名設定乙個預設值的實現

return self; // 返回它初始化完了的物件

}

通過呼叫

person *p = [[

person alloc

] init]

上面的方法,達到給成員變數乙個我們想給定初始值。

在init這種構造方法時,我們需要注意的是,他是先呼叫父類的構造方法,即[super init],再進行子類的內部成員的初始化,例如,(下面的完整程式中)

在使用上面的構造方法初始化我們的成員變數時,我們發覺它是乙個需要我們在程式還沒有寫完就確定,也就是他不能接受外界輸入的值。為了滿足這個需求,自定義方法就出現了。

自定義方法需要遵循以下格式:1、物件方法必須以「_」開始  2、返回值一定是id型別 3、方法名一般以init開始 4、要接受引數,引數的型別與要初始化成員變數的型別一樣 5、誰的成員變數就在誰的**初始化(比如下例的,學號是學生的成員變數,那麼姓名、年齡都在人的這個類中初始化),比如 ,

- (id)initwithnum :(nsstring *)num andname :(nsstring *)name andage:(int)age; // 給年齡、學號、姓名設定外界輸入的預設值的方法實現

@end

因此通過這種自定義的方法來初始化我們想要的成員變數的初始值。下面是乙個完整的例子,

#import // 建立乙個人的類

@inte***ce person : nsobject

@property nsstring *name; // 成員變數 姓名

@property int age; // 成員變數 年齡

- (id)initwithage :(int)age andname :(nssting *)name; // 給年齡設定外界輸入的預設值的方法宣告

@end

#import "person.h"

@implementation person

- (id)init // 給姓名設定乙個預設值的實現,即重寫init

return self;

}- (id)initwithage :(int)age andname :(nssting *)name // 給年齡設定外界輸入的預設值的方法宣告的實現

return self;

}@end

// 宣告乙個學生的類

@inte***ce student : person

@property nsstring *num ; // 定義乙個類方法 學號
- (id)initwithnum :(nsstring *)num; // 給學號設定外界輸入的預設值的方法宣告

- (id)initwithnum :(nsstring *)num andname :(nsstring *)name andage:(int)age; //給年齡、學號、姓名設定外界輸入的預設值的方法宣告

@end

#import "student.h"

@implementation student

- (id)initwithnum :(nsstring *)num // 給學號設定外界輸入的預設值的方法實現

return self;

}- (id)initwithnum :(nsstring *)num andname :(nsstring *)name andage:(int)age; // 給年齡、學號、姓名設定外界輸入的預設值的方法實現

@end

int main()

OC中的建構函式

oc中的建構函式實際上就是初始化方法。即init方法。總結 1.如果是無參建構函式,函式名必須是init。返回型別必須是id,函式前面必須是 號,如 id init 2.系統會自帶乙個無參的建構函式,作用是將當前物件的所有成員的內容初始化為0。3.self在此處表示當前物件。注 當前物件為呼叫該函式...

OC中靜態構造和動態構造的區別

student.h import inte ce student nsobject property nonatomic,retain nsstring name property nonatomic,assign int age endstudent.m import student.h impl...

六 oc中構造方法的學習

windows phone 7手機開發 ios培訓 期待與您交流!oc中的構造方法是用來初始化物件的方法,它是乙個物件方法,例如 init方法,它 是xcode中預設有的方法。呼叫 init方法的時候會遵循乙個順序,即是先初始化父類的成員變數 但是是先呼叫該類的 init方法 然後再一級一級的初始化...