2015-07-06 103 views
0

我創建一個組件並在另一個地方使用它,但我不知道該組件是否已發佈。如何檢查一個對象是否在firemonkey中釋放?

那麼如何在使用前檢查一個對象是否被釋放呢?

謝謝。

+1

對於'TComponent'後代解決方案將使用'FreeNotification'。如果只有一個對象的引用,那麼在釋放之後將引用重置爲'nil'是另一種方法。 –

+0

您是否可以提供有關您想要實現的內容的更多信息,以及針對移動,桌面編譯器或兩者的更多信息。 –

+0

也許這涵蓋你所需要的東西[我如何檢測組件已被釋放?](http://stackoverflow.com/q/12499722/4267244) –

回答

3

我假設你的目標是移動編譯器,否則ARC沒有被使用,那麼問題似乎是沒有意義的。

測試Disposed屬性。

處置爲只讀屬性,顯示此對象的當前狀態。

如果已使用DisposeOf方法處理對象 ,則Disposed屬性將返回True。否則,它返回False。

但是,你甚至可能會問這個問題看起來很奇怪。也許你沒有以最好的方式解決你的問題。

+0

什麼是downvote?我準備犯一個錯誤。 –

+0

@DalijaPrasnikar謝謝。我正在假設移動編譯器,現在已經說明了這一點。我同意這味道不好。 –

+4

使用'Disposed'屬性來完成超出臨時調試工具的任何事情確實是非常糟糕的編碼習慣。如果需要檢查是否用'Disposed'釋放對象,那麼代碼必須以不需要這種檢查的方式進行更改。 –

0

看完你的其他問題,你似乎試圖調試OSX上的內存問題,並試圖找出哪些對象已被釋放,但仍在使用。

我建議使用啓用了Full Debug模式的FastMM4。不要忘記在您的項目中部署libFastMM_FullDebugMode.dylib,以便使用FastMM4進行調試。如果您嘗試訪問已釋放的對象,則會引發異常。

0

除非您清除對該類的所有引用,否則對類的引用爲「活着」。 如果您不使用像DisposeOf這樣的髒方法,或者使用弱引用。

最好的方法 - 使用TDictionary。 在構造函數中添加一個類的地址,並在析構函數中刪除它。

相關問題