我讀過在對象的init方法中使用self.ivar =(便捷方法),這很糟糕,因爲這與繼承混淆。在對象的初始化方法中使用self關鍵字指定ivars
但是,如果您知道您不打算子類化您的對象,那麼使用self關鍵字賦值可以嗎?
i.e. self.iVar = [Object objectConvenienceMethod];
我問的原因是這個。我用它自己的init方法創建一個新對象,並在該方法中執行各種初始分配。由於我不使用self關鍵字,因此我將它們直接分配給iVar,因此使用alloc方法而不是便捷方法。即
iVar = [[Object alloc] init];
或者如果我使用便捷方法,我保留它。即
iVar = [[Object convenienceMethod]retain]
但是...當我用內存泄漏工具運行我的程序時,所有這些分配都被識別爲內存泄漏。
如果我可以使用self關鍵字加一個方便的方法而不是alloc-init,那麼這可以避免這個問題。
如果我選擇使用alloc-init方法,但我應該在哪裏發佈iVars?只是在dealloc?
感謝您的幫助:)
邁克爾
嚴格來說,它是`alloc`而不是`init`,你需要平衡,但它們通常是齊頭並進。 – walkytalky 2010-11-23 17:21:45
謝謝,糾正了我的答案。 – paulbailey 2010-11-23 17:23:05
但我確實在dealloc方法中釋放了它們 - 但是當我創建一個新的對象實例時,泄漏檢測器仍然會將它們識別爲泄漏。 :( – Smikey 2010-11-23 17:23:46