我不理解如何给数组的弱引用或释放数组的分配内存,谁能告诉我如何解决这个泄漏?我如何释放数组的分配内存?
var menuDetails:[[String:Any]] = []//this my global array object
即使我使用ARC,也得到以下漏洞。
Screenshot for array memory leak
我只是害怕关于内存泄漏,谁能告诉我怎么解决?
我不理解如何给数组的弱引用或释放数组的分配内存,谁能告诉我如何解决这个泄漏?我如何释放数组的分配内存?
var menuDetails:[[String:Any]] = []//this my global array object
即使我使用ARC,也得到以下漏洞。
Screenshot for array memory leak
我只是害怕关于内存泄漏,谁能告诉我怎么解决?
你不想使用弱引用。如果你这样做,你的数组将立即被释放。
weak var weakArray:[[String:Any]]? = []
只要您创建它,它将包含nil。
相反,你应该设置数组为零(或空),一旦你与内容进行:
你可以使用`menuDetails.removeAll()删除阵列中的所有条目,或者你可以改变你的宣言,使其成为一个可选
var menuDetails:[[String:Any]]? = []//this my global array object
然后将其设置为nil,当你用它做:
menuDetails = nil
这就是我一直在寻找...容易的东西 – sharayu
的对象将仅在另一个对象保留对此有很强的参考。只要你的视图控制器消失,它也很可能会被释放,这会自动删除其对其他对象的强引用。因此,如果imageArray仅被消失的视图控制器强烈引用,内存将自动释放。你不需要使用autoreleasepool。
为了在数组和/或字典中存储弱引用,需要一个中间结构。
例如:
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 ...
}
的语法很可能进行由运营商定制和仿制药包装这更清晰,但这是它的通用方法。
阵列的大小是多少@ sharayu –
不知道它的动态。 – sharayu
这个数组是否有大量的数据@ sharayu –