OC之構造方法

完整地建立一個可用的對象系統須要進行如下兩步:java

1.分配存儲空間 +allocthis

2.初始化 -initspa

好比建立一個對象:.net

Person *p = [Person new]; 指針

則系統實際上進行了如下兩步:對象

    1.調用+alloc分配存儲空間內存

                  Person *p1 = [Person alloc];開發

    2.調用-init進行初始化get

                                     Person *p2 = [p1 init];it

 以上兩步可結合成以下形式,而且在實際開發中也是使用以下形式

                  Person *p = [[Person alloc] init];

上述的init方法就是所謂的構造方法

咱們也能夠重寫構造方法init

構造方法:用來初始化對象的方法,是個對象方法,-開頭

重寫構造方法的目的:爲了讓對象建立出來,成員變量就會有一些固定的值

重寫構造方法的注意點

1.先調用父類的構造方法([super init]

2.再進行子類內部成員變量的初始化

@implementationPerson

/* 重寫-init方法

- (id)init

{

1.必定要調用回superinit方法:初始化父類中聲明的一些成員變量和其餘屬性

self = [super init]; // 當前對象self

2.若是對象初始化成功,纔有必要進行接下來的初始化

    if (self != nil)

    { // 初始化成功

        _age = 10;

    }

    // 3.返回一個已經初始化完畢的對象

    return self;

}*/

- (id)init//id是爲了保證方法能夠有任何類型的返回值

{

    if ( self = [super init] )

    { // 初始化成功

        _age = 10;

    }

    // 3.返回一個已經初始化完畢的對象

    return self;

}

@end

【備註】上面代碼提到了super,super與self是有區別的,拿java來比較,self就至關於this,super表明調用父類的方法,好比[super test]表明調用父類中的test方法。

關於初始化構造方法詳解:

好比初始化構造方法,使Person的對象剛剛建立,Person中的成員變量_age就被初始化爲10


當建立一個對象時,以下:

Person*p = [[Person alloc] init];//等價於Person *p = [Person new]

首先調用alloc方法,爲每一個成員變量分配空間:

在Person的對象中,有_age變量,默認還有一個變量isa,調用alloc方法後,_age和isa將存在於內存空間中,而且默認狀況下他們都有一個初值且初值都爲0。

而後對象就會調用父類中的init方法,父類以後就會去調用NSObject中的init方法,因而全部成員變量就被從新賦值,_age = 0和isa = [Person class]。即對象的成員變量isa將變成一個指向對象父類的指針。而重寫init方法能夠給_age從新賦值,可讓_age等於除0之外的值。

因此在重寫init方法時必定要判斷self = [super init]是否成立,也就是判斷是否成功調用了NSObject中的init方法,只有成功調用init方法後纔可重寫構造方法。

相關文章
相關標籤/搜索