天天看點

oc基礎第6天-構造方法

一. 響應方法,構造方法

1.響應方法

Bool isInstace = [p respondsTosesector:@selector(run)];

// 沒有參數

-(id) performSelector:selector(應用selector指定的方法) NSObject的方法

// 一個參數

-(id) performSelector:selector withObject:object(應用selector指定的方法,傳遞參數 object)

// 二個參數

-(id) performSelector:selector withObject:object1 withObject:object2(應用selector指 定的方法,傳遞參數object1和object2)

//********************

 nil : oc中對象的空值

 Nil : 類對象空值

 null: 伺服器傳回字段的空值

 NULL: c語言中指針變量空值

2. 構造方法

建立對象:Person *p=[Person new];

new方法内部做了3件事情:

(1)使用alloc方法來配置設定存儲空間(傳回配置設定的對象);

(2)使用init方法來對象進行初始化。

(3)傳回對象的記憶體首位址。

可以把new方法拆開如下:

(1).調用類方法+alloc配置設定存儲空間,傳回未經初始化的對象

Person *p1=[Person alloc];

(2).調用對象方法-init進行初始化,傳回對象本身

Person *p2=[p1 init];

(3).以上兩個過程整合為一句:

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

(1)init方法就是構造方法,是用來初始化對象的方法,稱為構造初始化。

(2) alloc

向某個類發送alloc消息的結果 ,為該類配置設定記憶體(對象的記憶體位址已經有了),以存放該類的全部執行個體變量 。

注意

一個剛剛配置設定的對象并不能立即使用 ,

需要先初始化該對象,然後才能使用它 ,

但由于未進行初始化, 随後可能出現一些不可預測的行為.

二. 重寫構造方法

1. [super init]的作用:先調用父類的初始化方法,對從父類繼承過來的成員變量進行初始化。初始化完了之後,傳回我目前的對象指針。

//**************************************************

-(id)init

{

    if(self = [super init])

    { //為子類增加屬性進行初始化

    }

    return self;

}

這裡涉及了幾個問題,

1. [super init]的作用: 面向對象的展現,先利用父類的init方法為子類執行個體的父類部分屬性初始化。

2. self 為什麼要指派為[super init]: 簡單來說是為了防止父類的初始化方法release掉了self指向的空間并重新alloc了一塊空 間。這時的話,[super init]可能alloc失敗,這時就不再執行if中的語句。

3. super作為消息接受者的實質:

super并不是真正的指針,[super message]的實質是由self來接受父類的message。需要注 意的是,[super message]中,message方法出現的self為[super message]語境中的self, 即子類執行個體。

//**************************************************

2. 重寫構造方法注意事項:

構造方法使用注意

(1)子類擁有的成員變量包括自己的成員變量以及從父類繼承而來的成員變量,在重寫構造方法的時候 應該首先對從父類繼承而來的成員變量先進行初始化。

(2)原則:先初始化父類的,再初始化子類的。

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

(4)注意點:先調用父類的構造方法[super init]; 再進行子類内部成員變量的初始化。

3.構造方法應用場景:

如果對象中的一些屬性需要在初始化的時候就需要有值, 可以使用構造方法來完成.

自定義構造方法

1. 自定義構造方法的規範

(1)一定是對象方法,以減号開頭

(2)傳回值一般是id類型或者instancetype類型

(3)方法名一般以initWith開頭

2. 自定義構造方法的實作

- (instancetype)init

{

    self = [super init];

    if (self) {

        // 要初始化的成員變量.

    }

    return self;

}

3. 自定義構造方法的使用注意

(1). 自己做自己的事情

(2). 父類的方法交給父類的方法來處理,子類的方法處理子類自己獨有的屬性

三. 自定義構造方法

1. 自定義構造方法的規範

(1)一定是對象方法,以減号開頭

(2)傳回值一般是id類型或者instancetype類型

(3)方法名一般以initWith開頭

2. 自定義構造方法的實作

- (instancetype)initWithName:(NSString *)name andAge:(int)age;

{

    self = [super init];

    if (self) {

        // 要初始化的成員變量.

        _name = name;

        _age = age;

    }

    return self;

}

3. 自定義構造方法的使用注意

(1) 自己做自己的事情

(2) 父類的方法交給父類的方法來處理,子類的方法處理子類自己獨有的屬性

4. 使用場景

如果對象被建立的時候, 需要對裡面某些屬性進行初始化(設定), 這個時候就可以使用構造方法