3
是否可以手動清除內存中的對象內容?如何手動清零內存?
特別是,我正在處理NSData
。我試過使用data.length = 0
和data.setData(NSData)
。
我知道ARC
會在它超出它所屬的範圍之後進入並清除,但是當我需要時可以手動強制執行此過程嗎?
是否可以手動清除內存中的對象內容?如何手動清零內存?
特別是,我正在處理NSData
。我試過使用data.length = 0
和data.setData(NSData)
。
我知道ARC
會在它超出它所屬的範圍之後進入並清除,但是當我需要時可以手動強制執行此過程嗎?
我想你對ARC有一些誤解我想澄清一下。 ARC的目標是確保不會發生內存泄漏。它負責跟蹤對象的整個生命週期,並確保它在沒有引用保留時「釋放」。
需要注意的是,「釋放」的內存並不意味着「全部用0寫入」。
它只是意味着內存將被指定爲未使用。當系統需要爲新對象分配內存時,釋放的內存將成爲分配的候選對象。
但是,沒有保證,這種重新分配將會發生,因此您釋放的內存很可能包含您的原始數據,並且不會被覆蓋。
因此,即使在接受一個對象並覆蓋其自身內容'.setdata(nsdata())'後,它不能保證實際內存將被新值覆蓋?或者你指的是什麼時候讓對象完全移動? –
我不知道你正在討論哪個'setdata'方法,但很可能它更新了接收器的內部實例變量,它包含對NSData的引用。爲它設置一個新的值將使ARC釋放它用來引用的舊NSData對象(如果沒有別的東西引用該NSData對象),但不能保證它將被清零。 – Alexander
NSMutableData SetData() - https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSMutableData_Class/#//apple_ref/occ/instm/NSMutableData/setData: –