OC基礎第五章:構造方法

一、構造方法
構造方法:用來初始化對象的方法,是個對象方法,-開頭 重寫構造方法的目的:爲了讓對象創建出來,成員變量就會有一些固定的值
1、構造方法
1)構造方法的調用
完整的創建一個可用的對象: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方法就是構造方法,是用來初始化對象的方法,注意這是一個對象方法,以減號開頭。 默認初始化完畢後,所有成員變量的值都爲0。
(2) alloc
向某個類發送alloc消息的結果 爲該類分配內存,以存放該類的全部實例變量 還將這塊內存區域全部初始化爲0
注意
一個剛剛分配的對象並不能立即使用 需要先初始化該對象,然後才能使用它 但由於未進行初始化, 隨後可能出現一些不可預測的行爲.

2、重寫 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, 即子類實例。

構造方法使用注意
(1)子類擁有的成員變量包括自己的成員變量以及從父類繼承而來的成員變量,在重寫構造方法的時候 應該首先對從父類繼承而來的成員變量先進行初始化。
(2)原則:先初始化父類的,再初始化子類的。
(3)重寫構造方法的目的:爲了讓對象方法一創建出來,成員變量就會有一些固定的值。

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

二、自定義構造方法

1)自定義構造方法的規範
(1)一定是對象方法,以減號開頭
(2)返回值一般是id類型
(3)方法名一般以initWith開頭

2)自定義構造方法的代碼實現
- (id)initWithName:(NSString *)name
- (id)initWithName:(NSString *)name andAge:(int)age

3、自定義構造方法的使用注意
(1)自己做自己的事情
(2)父類的方法交給父類的方法來處理,子類的方法處理子類自己獨有的屬性

發佈了55 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章