首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何释放分配给数组的内存?

问如何释放分配给数组的内存?
EN

Stack Overflow用户
提问于 2017-04-12 12:35:17
回答 3查看 3.2K关注 0票数 0

我不知道如何给数组提供弱参考或释放分配给数组的内存,有人能告诉我如何修复这个漏洞吗?

代码语言:javascript
复制
 var menuDetails:[[String:Any]] = []//this my global array object

跟踪泄漏,甚至我正在使用ARC。

阵列内存泄漏的截图!

​

​

我只是害怕那个内存泄漏,有人能告诉我怎么修复它吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-12 12:47:55

你不想使用弱引用。如果这样做,您的数组将立即释放。

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

一旦你创建它,就会包含零。

相反,在处理完内容后,应该将数组设置为0(或空):

可以使用`menuDetails.removeAll()删除数组中的所有条目,也可以更改声明,使其成为可选的

代码语言:javascript
复制
var menuDetails:[[String:Any]]? = []//this my global array object

当你把它做完后,把它设为零:

代码语言:javascript
复制
menuDetails = nil
票数 3
EN

Stack Overflow用户

发布于 2017-04-12 13:03:46

只有当另一个对象具有强引用时,对象才会被保留。一旦您的视图控制器消失,它很可能也会被解除分配,这将自动删除对其他对象的强引用。因此,如果imageArray仅由正在消失的视图控制器强引用,则内存将自动释放。您不需要使用自动释放池。

票数 0
EN

Stack Overflow用户

发布于 2017-04-12 16:09:20

为了在数组和/或字典中存储弱引用,您需要一个中间结构。

例如:

代码语言:javascript
复制
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 ...

}

通过在自定义运算符和泛型中包装语法,语法可能会变得更加清晰,但这是实现它的一般方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43369716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档