我不知道如何给数组提供弱参考或释放分配给数组的内存,有人能告诉我如何修复这个漏洞吗?
var menuDetails:[[String:Any]] = []//this my global array object跟踪泄漏,甚至我正在使用ARC。
阵列内存泄漏的截图!

我只是害怕那个内存泄漏,有人能告诉我怎么修复它吗?
发布于 2017-04-12 12:47:55
你不想使用弱引用。如果这样做,您的数组将立即释放。
弱var weakArray:[String:Any]?= []
一旦你创建它,就会包含零。
相反,在处理完内容后,应该将数组设置为0(或空):
可以使用`menuDetails.removeAll()删除数组中的所有条目,也可以更改声明,使其成为可选的
var menuDetails:[[String:Any]]? = []//this my global array object当你把它做完后,把它设为零:
menuDetails = nil发布于 2017-04-12 13:03:46
只有当另一个对象具有强引用时,对象才会被保留。一旦您的视图控制器消失,它很可能也会被解除分配,这将自动删除对其他对象的强引用。因此,如果imageArray仅由正在消失的视图控制器强引用,则内存将自动释放。您不需要使用自动释放池。
发布于 2017-04-12 16:09:20
为了在数组和/或字典中存储弱引用,您需要一个中间结构。
例如:
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 ...
}通过在自定义运算符和泛型中包装语法,语法可能会变得更加清晰,但这是实现它的一般方法。
https://stackoverflow.com/questions/43369716
复制相似问题