我在返回類NSMutableArray的對象的非void實例方法中發生另一個內存泄漏。目標C:非void實例方法中的內存泄漏
有人能告訴我我如何能解決這個泄漏?我試圖在該方法結束時發佈'userFollowings',但它仍在報告泄漏。
我在返回類NSMutableArray的對象的非void實例方法中發生另一個內存泄漏。目標C:非void實例方法中的內存泄漏
有人能告訴我我如何能解決這個泄漏?我試圖在該方法結束時發佈'userFollowings',但它仍在報告泄漏。
當你是從你要麼初始化它或保留它的方法返回一個對象的結局,通常的做法是返回它自動釋放。這樣,接收對象的用戶不必擔心釋放它。所以,你的代碼的最後一行應該是這樣的:
return [userFollowing autorelease];
它可能不會傷害到從Memory Management Programming Guide讀一點趕上內存管理規則,如本,並有大量的其他有用的資源在網站和本網站上。
問題是userFollowings
永遠不會被釋放。試着用
return [userFollowings autorelease];
有Cocoa程序使用a set of conventions,使內存管理更不容易出錯。當一個方法返回一個對象時,調用它的代碼需要知道它是否擁有它。
什麼它歸結爲是,如果你正在寫一個返回對象的方法和方法不通過被稱爲像new
,alloc
,copy
等傳達所有權當呼叫者,你需要autorelease
它在你返回之前。
這就是你正在談論的消息 - 「對象返回給調用者作爲擁有參考」意味着你正在傳遞調用代碼的所有權。問題是您的方法名稱指示了其他情況。
如果我打電話給你的方法,並需要掛在對象上,我會打電話給retain
,以便我擁有它。我需要這樣做,因爲您的方法名稱暗示我不是所有者。只要你返回一個自動釋放對象,這是正確的。但是,如果您不自動釋放對象,則最終的保留計數爲2 - 一次分配時,一次保留。當我最終發佈它時,它仍然具有1的保留計數,並且永遠不會從內存中釋放,導致內存泄漏。
試試這個:
NSMutableArray* userfollwings = [[[NSMutableArray alloc] init] autorelease]