2012-03-12 76 views
0

對不起,要問基本的和一些更重要的棘手問題。我有一個單例類,它已經存在於我的應用程序中(不幸的是我沒有實現該類)。現在我正在檢查整個代碼該項目使用分析器 singleton類向我展示了內存泄漏。我不確定代碼是否正確,因爲處理singleton類非常棘手。請任何人告訴我爲什麼分析器給我泄漏。我附加了singleton類方法請檢查屏幕截圖singleton處理單例對象

在我的項目中,我們正在調用[className sharedDataSource];很多次。請提前給我提供一些知識。

+0

_instance變量是靜態的嗎? – ggfela 2012-03-12 14:13:27

+0

感謝您的response.static KitabooBookListDataSource * _instance = nil;行是有的 – ajay 2012-03-12 14:18:20

+0

你應該只是'返回[[self alloc] init];' – 2012-03-12 14:23:56

回答

1

我認爲它非常安全,可以忽略這個警告真的。有關單身人士如何表現爲單身人士的更多解釋,您可能會發現this link相當明亮。

長話短說,所有調用alloc的函數都會調用allocwithzone,並且在allocandzone中,有一個條件可以確保alloc只發生一次。同意,這個實現是相當不可靠的。但是,如果您想要稍後重構它,或者甚至僅僅爲了學術興趣,實現單例的方法有很多不同的方式,如here

+0

我打算暫時忽略它。 – ajay 2012-03-12 15:39:14

+1

我真的不知道爲什麼人們會打擾這種可怕的模式。看看我的回答這個問題:http://stackoverflow.com/questions/9588253/returning-a-static-with-allocwithzone/9588496#9588496特別是GCD版本是相當優雅。 – JeremyP 2012-03-12 16:54:24

+0

我個人更喜歡你使用dispatch_once的第二個實現,這裏的這個感覺更像它的java-land – govi 2012-03-12 16:57:47

1

我認爲這是正確的。從單身人士的角度考慮它。單例是一個存在的類,整個應用程序只有一個實例。這是一個有目的的內存泄漏。這個類被聲明並且不應該被釋放,以便稍後可用。

如果你在objective-c中使用這種模式,我認爲你有責任在不再需要單例時清除內存。

+0

感謝您的回覆我需要這個單例實例不斷釋放它。 – ajay 2012-03-12 14:44:45

+0

然後爲了清晰起見,我建議在您的應用程序退出時釋放單身人士 – 2012-03-12 14:52:59