Objective-C初始化方法

一、繼承

面向對象的三大特性:封裝,繼承,多態(tài)。
?向對象提供了繼承特性。
繼承既能保證類的完整,又能簡化代碼。
面向對象所提供的繼承特性可以大大簡化代碼。把公共的?法和實例變量寫在父類里,子類只需要寫?己獨有的實例變量和方法即可。


繼承的特點

沒有父類的類稱為根類,OC中的根類是NSObject(祖宗)。
繼承的上層:父類,繼承的下層:子類。
繼承的內(nèi)容:所有實例變量和方法。
繼承是單向的,不能相互繼承。
繼承具有傳遞性:A繼承于B,B繼承于C,A具有B和C的特征和?為。
如果子類不滿意父類方法的實現(xiàn),可以重寫(overwrite)父類的方法。

super

super是編譯器指令,并非對象。
作?:給super發(fā)消息,可以執(zhí)?父類該?法的實現(xiàn) 。

重寫從父類繼承過來的方法的三種情況:

完全以子類的實現(xiàn)內(nèi)容為主,丟棄父類實現(xiàn)的內(nèi)容。
完全以父類的實現(xiàn)內(nèi)容為主,沒有子類實現(xiàn)的內(nèi)容。
既有父類對該方法的實現(xiàn),也有子類對該方法的實現(xiàn)。

二、初始化方法

創(chuàng)建對象分兩步:
1.為對象開辟空間。
2.進行初始化操作。

初始化?法的主要作用是:為某些實例變量賦初值。
初始化?法在對象的整個?命周期?只使?一次。
注:初始化方法是在對象的初始化階段完成其實例變量的賦值操作,一個對象的初始化階段只有一次,所以初始化方法只使用一次。

1.重寫init方法

- (id)init {
    //給super發(fā)送init消息:執(zhí)行父類中實現(xiàn)的init方法
    self = [super init];//self是系統(tǒng)關鍵字。 self在方法中指代當前方法的調(diào)用者。
    //判斷從父類繼承過來的init方法是否初始化成功
    if (self) {
        //初始化設置
    }
    //返回初始化完成的對象
    return self;
}

?類定義了除?類中公共實例變量之外的實例變量。
在?身的初始化?法中,優(yōu)先向super發(fā)送init消息,初始化公共變量,初始化成功之后,再初始化?身特有變量,從?完成全部實例變量的初始化。

2.自定義initWith方法

- (instancetype)initWithName:(NSString *)name age:(NSInteger)age{
    //調(diào)用父類初始化方法
    self =[super init];
    if (self) {
      //初始化設置
    }
    //返回初始化完成的對象
    return self;
}

初始化?法以init開頭,在對象的生命周期中只使?一次。

三、便利構造器

封裝了對象創(chuàng)建過程:
內(nèi)部實現(xiàn):封裝了alloc和初始化操作,創(chuàng)建對象更加方便快捷。
便利構造器是“+”方法。
返回 本類型 的實例。
?法名以類名開頭。
可以有0到多個參數(shù)。

便利構造器實現(xiàn)和使用

聲明
(id)personWithName:(NSString *)name gender:(NSString *)gender;
實現(xiàn)
 + (id)personWithName:(NSString *)name gender:(NSString *)gender {
    return [[Person alloc] initWithName:name gender:gender];
}
調(diào)用
Person *per = [Person personWithName:@"Frank" gender:@"男"];

便利構造器封裝了對象的創(chuàng)建過程,進?步簡化了對象創(chuàng)建的步驟。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容