2017-04-12 82 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 ... 

} 

的语法很可能进行由运营商定制和仿制药包装这更清晰,但这是它的通用方法。