我的基類具有子類使用的屬性。應該在哪裏調用Release?在原始基類或繼承它的類中?在類或子類中調用發佈?
回答
我想說,每個班級管理自己的屬性。所以子類應該釋放它自己的屬性和基類版本。
一旦子類被釋放,它將不會訪問基類屬性,它在技術上不再存在。寫作的dealloc的標準方法是:
- (void)dealloc
{
// release my stuff, after this line
// I don't exist and do not need to access any of my properties
[super dealloc];
}
我對Objective-C很新,所以我也很好奇這裏的最佳答案。我認爲你應該在屬性合成的父類-dealloc
中將屬性設置爲nil
。如果由於某種原因將其保留在子類中,則還應該在子類中釋放它,但在超類中將該屬性設置爲nil
不應有任何負面影響。
Apple文檔不應該在init/dealloc中使用屬性設置器,所以您不應該將屬性設置爲零,而只需調用[ivar release]。如果您還需要將ivar設置爲零,那麼您應該糾正一些錯誤(例如,移除定時器/觀測值/經過調用的方法調用)。 – 2009-06-23 07:42:36
很高興知道,謝謝。 – pix0r 2009-06-23 21:55:15
如果屬性僅用於子類,就應該在子類(而不是父類)中定義的子類應該釋放他們中它的 - (空)的dealloc功能。你會有這樣的事情:
- (void)dealloc
{
[username release];
[password release];
[super dealloc];
}
請注意,我們不調用dealloc的屬性!我們只是稱之爲「發佈」,這意味着我們不再使用它們,系統可以清理它們(提供沒有人正在使用它們)。
在給定的塊中,保留,複製,alloc的調用次數應該通過調用release,autorelease來平衡。 如果你保留在子類中的東西,在子類中釋放它,並且如果在基類中...
我從文章中的內存中逐步解釋了這一點。
簡答:在基類中。
長答案:對象由其他對象「擁有」。要擁有一個對象,你必須分配或保留它(帶有retain,alloc,new或copy)。所有者負責以釋放或自動釋放方式處理內存。每個分配/保留應該有一個釋放/自動釋放。
這是可可約定,只有以「new」和「copy」開頭的方法返回已被分配/複製/保留但不屬於方法接收者的對象。那麼所有者就是稱爲「新」或「複製」功能的對象。
- 1. NSWindowController子類不會在ARC中發佈
- 2. 超類/子類的調試/發佈構建差異
- 3. 如何在子類中調用父類?
- 4. 調用子類非虛方法或設置子類屬性
- 5. Ember.js如何從子類調用超類或基類方法?
- 6. 調用子類的父類
- 7. 從子類中調用父類
- 8. 調用子類中「super.loadUrl」
- 9. 調用子類從Java中
- 10. 如何從外部類中調用其他子類的子類
- 11. NSString子類或包裝類或類別
- 12. 分類嵌套類別 - >子分類 - >發佈查看Wordpress
- 13. NSNotificationCenter從超類或子類調用方法?
- 14. cancelOperation在NSView子類中不調用
- 15. 在子類中調用父方法
- 16. 在子類中調用父函數
- 17. shouldStartLoadwithRequest未在子類中調用
- 18. 子類NSControl,IBAction不在Swift中調用
- 19. Metaclass不在子類中調用
- 20. 在UIView子類中調用drawRect
- 21. 在UICollectionViewLayout子類中未調用layoutAttributesClass
- 22. 你是否在子類中調用super.finalize()?
- 23. mouseDragged:在NSView子類中未調用
- 24. rightMouseDown:未在NSControl子類中調用
- 25. 在子類中限制函數調用
- 26. IEqualityComparer不在字典中調用子類
- 27. focusInEvent未在QLineEdit子類中調用
- 28. touchesBegan沒有在UIView子類中調用
- 29. drawRect未在AsyncImageView的子類中調用
- 30. 調用子類的方法,在Java中
同意。無論語言如何,這都是OO編程中的規則。屬性是基於所有權的,比如Objective-C內存管理 - 兩者幾乎總是一樣的,因爲屬性本質上是一種訪問實例變量的好方法。總是在聲明它們的類中釋放ivars,而不是在它的任何子類中(如果有的話)。它基本上是匹配保留和釋放調用的模式。 – 2009-06-23 08:12:19