是有區別/首選方式撥打電話給超類方法,如[super viewDidLoad]
或[super init]
或[super viewDidUnload]
什麼時候?我看過教程把它們放在第一行或作爲子類方法的最後一行。我只是想知道是否會有一樣,如果超類的方法會做一些設置所謂的前期,當孩子可以使用任何依賴性或者如果超可以做一些優化的東西孩子做當年底叫。
超類的方法放置
回答
我的一般經驗法則是,施工/創建行爲首先通過super
調用,而銷燬行爲或拆除行爲發生的順序相反 - super
稱爲最後一次。很少有必要偏離這一點。
原因通常不是用於優化(正如您在文章中所述),而是用於可預測的語義。
實施例A:
結構:
- (id)init
{
self = [super init]; // << set up super
if (0 != self) {
// set up self
...
破壞:
- (void)dealloc
{
[ivar release], ivar = 0; // << tear down self
[super dealloc]; // << tear down super
實施例B:
結構:
- (void)viewWillAppear:(BOOL)pAnimated
{
[super viewWillAppear:pAnimated]; // << call through super first
// now set up self
...
破壞:
- (void)viewDidDisappear:(BOOL)pAnimated
{
// tear down self
[super viewDidDisappear:pAnimated]; // << now tear down super
我剛剛介紹過'init',但你完全正確。 –
您必須初始化超級第一個,因爲超級構造函數可以選擇返回除原始值self
以外的值。
self = [super init];
如果初始化的self
其他屬性調用[super init]
之前,這些變化可能會被刪除。
這到底是幹嘛的?
@Justin指出類集羣(用於返回NSDictionary或NSString的實例時)使用此機制根據任務提供稍微不同的子類。單身也可以用這個和Objective-C的(廢棄)Pose
功能,可以爲好。
我不知道這是否真的發生在實踐中,但你必須遵守規則。 –
它確實發生。類集羣和單例是顯着的例子。 – justin
我想到了單身,然後一陣寒意流過了我。在接收單例之後初始化子類似乎不是一個好主意 - 原始的可能是不同的子類,或者有運行數據。 –
- 1. 在類中放置方法
- 2. 調用超類超類的方法
- 3. 超類方法返回超類對象
- 4. 超類/子類方法
- 5. 來自超類的方法
- 6. 超類的Javascript方法
- 7. 調用超類的方法
- 8. 超類的隱藏方法
- 9. javascript中的超類方法
- 10. 訪問超級超類中的方法
- 11. 在類庫中放置FileUpload方法
- 12. 如何將子類方法放入超類JLabel中?
- 13. Javascript繼承:從超類的方法設置子類的屬性
- 14. 超類的子類的調用方法
- 15. 超類的子類的調用方法
- 16. 方法必須重寫超類方法
- 17. 調用超類的子類方法
- 18. Python的方法放置
- 19. 服務的放置方法
- 20. 方法intrinsicContentSize()從超類
- 21. 調用超類方法
- 22. 超看到子類方法
- 23. 超類包含方法C#
- 24. java超類顯示方法
- 25. 調用超類方法
- 26. 使用重寫的子類方法的超類方法
- 27. DDD方法中放置「ViewModel類」的位置?
- 28. 方法不會超越方法從超類錯誤android
- 29. 來自重載子類方法的調用超類方法
- 30. 方法StartInctivity類型的onInit(int)必須重寫超類方法
的[我什麼時候應該叫超?(http://stackoverflow.com/questions/3906704/),[我應該叫\ [超級superMethod可能重複\]後我自己的代碼或之前呢?](http://stackoverflow.com/questions/7441519/),[頂部或底部超級調用重寫的方法](http:// stackoverflow。(http://stackoverflow.com/questions/3466889/),[調用ObjectiveC中的超類問題方法的時機?](http:/ /問題/ 12019031 /),[調用超級] /stackoverflow.com/questions/1005196/) –