2017-04-12 73 views
0

我不理解如何給數組的弱引用或釋放數組的分配內存,誰能告訴我如何解決這個泄漏?我如何釋放數組的分配內存?

var menuDetails:[[String:Any]] = []//this my global array object 

即使我使用ARC,也得到以下漏洞。

Screenshot for array memory leak

我只是害怕關於內存泄漏,誰能告訴我怎麼解決?

+0

陣列的大小是多少@ sharayu –

+0

不知道它的動態。 – sharayu

+0

這個數組是否有大量的數據@ sharayu –

回答

3

你不想使用弱引用。如果你這樣做,你的數組將立即被釋放。

weak var weakArray:[[String:Any]]? = []

只要您創建它,它將包含nil。

相反,你應該設置數組爲零(或空),一旦你與內容進行:

你可以使用`menuDetails.removeAll()刪除陣列中的所有條目,或者你可以改變你的宣言,使其成爲一個可選

var menuDetails:[[String:Any]]? = []//this my global array object 

然後將其設置爲nil,當你用它做:

menuDetails = nil 
+0

這就是我一直在尋找...容易的東西 – sharayu

0

的對象將僅在另一個對象保留對此有很強的參考。只要你的視圖控制器消失,它也很可能會被釋放,這會自動刪除其對其他對象的強引用。因此,如果imageArray僅被消失的視圖控制器強烈引用,內存將自動釋放。你不需要使用autoreleasepool。

0

爲了在數組和/或字典中存儲弱引用,需要一箇中間結構。

例如:

struct WeakRef 
{ 
    weak var object:AnyObject? 
    init(_ objectRef:AnyObject?) 
    { object = objectRef } 
} 

// use WeakRef when you add object instances to your dictionary (or array) 

menuDetails[0]["objectKey"] = WeakRef(yourObject) 

// you will need additional code to get the actual object out of the intermediate structure 
// and given that it is a weak reference you'll also need to deal with its optionality. 

if let yourObject = (menuDetails[0]["objectKey"] as? WeakRef)?.object as? YourClass, 
{ 
    // ... do your thing with your object ... 

} 

的語法很可能進行由運營商定製和仿製藥包裝這更清晰,但這是它的通用方法。