[self class]腥光、[self superclass]、[super class]分別表示什么意思糊秆?
- [self class]是表示當前類武福、self是指向自己的指針,可以打印出來
- [self superclass] 是表示當前類的父類
- [super class] : 首先super不是指針痘番,只是關鍵字捉片,不能打印出來;其次這個
[super class]
表示的是當前對象汞舱,而且super
可以用來調(diào)用父類方法伍纫,比如[super init]
,表示當前類對象調(diào)用父類初始化方法昂芜。
因為子類繼承自父類莹规,需要獲得父類的實例和方法等,所以初始化子類之前要先保證父類已經(jīng)初始化完畢泌神,防止出錯良漱。當調(diào)用
self = [super init]
方法時,如果父類初始化不成功欢际,那么會返回nil
母市,所以可以根據(jù)self
是否為nil
判斷父類是否初始化成功,從而進行合理地處理幼苛,以便起到容錯效果窒篱。
引申:使用
dealloc
方法釋放對象時,為什么一定要調(diào)用[super dealloc]
方法?在何處調(diào)用?
- 因為子類的很多
實例變量
是繼承自父類的舶沿,所以要調(diào)用[super dealloc]
方法來釋放從父類繼承來的實例變量墙杯,實際上還是釋放自己的實例變量,只是繼承來的這部分只能調(diào)用父類的dealloc
方法來釋放括荡。 - 按照自下往上的邏輯高镐,一般要先釋放子類的實例,然后釋放父類的實例畸冲。自下往上的原因是嫉髓,在調(diào)用
[super dealloc]
方法之前如果不先把子類中的變量從內(nèi)存中釋放掉,容易造成子類中變量的內(nèi)存積壓邑闲,導致內(nèi)存泄漏算行,所以[super dealloc]
方法應該在釋放掉子類變量之后最后調(diào)用。當然在ARC中就不需要考慮這些問題
了苫耸,變量會自動釋放州邢,此方法也不存在了。