【问题标题】:Minor leakages with CoreData or Outlet collectionCoreData 或 Outlet 集合的轻微泄漏
【发布时间】:2015-07-17 03:20:32
【问题描述】:

几天后我仍然无法找出为什么使用executeFetchRequest 会导致小的内存泄漏,显示在 Instruments: Leaks 中。我完全知道 UIKit 有很多漏洞,但我想至少尝试更好地理解它。

每当我执行 fetch 请求时,只要我不将它分配给类属性,它就不会泄漏。为了更好地解释这一点,我创建了一个新项目,如下所示:

class TestViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet weak var tableView: UITableView!

    let context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext!

    var persons = [Persons]()

    override func viewDidLoad() {
        super.viewDidLoad()

        let request = NSFetchRequest(entityName: "Persons")
        let results = context.executeFetchRequest(request, error: nil) as! [Persons]
        persons = results     //If I comment out this line, no leak will occur
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return persons.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell

        cell.textLabel?.text = persons[indexPath.row].name

        return cell
    }
}

在我更改为这个 ViewController 后,大约 10 秒后 Instruments 中会出现泄漏(请参见下面的屏幕截图)。

经过更多测试,创建outlet collection 也会导致轻微泄漏。找了几天,好像没有多少人遇到同样的问题。我想知道我做错了什么还是应该忽略这个?泄漏的大小并没有那么大(大约 100 字节)。

【问题讨论】:

  • 我在分析内存泄漏时也注意到了这一点,并且对没有其他关于它的堆栈溢出帖子感到困惑。现在我决定单独添加所有 IBOutlets,然后有一个计算的 var 来返回一个插座的集合。至少这样泄漏不会出现在仪器中。

标签: swift core-data memory-leaks nsfetchrequest


【解决方案1】:

关于出口集合泄漏内存的问题, 见this answer

正如乔柯林斯所说,解决方法是:

"... 将 [UIButton]! 替换为 NSArray! 并在稍后使用时将其内容转换为 UIButton。"

【讨论】:

    【解决方案2】:

    我认为泄漏是初始化的[Persons] 数组,它从未使用过,但被获取结果覆盖。一旦视图控制器被释放,“泄漏”的内存很可能会被回收。

    根据我的理解,鉴于问题的范围,您可以放心地忽略这种现象。

    【讨论】:

    • 不。自己试试吧。
    猜你喜欢
    • 1970-01-01
    • 2012-03-07
    • 2011-02-21
    • 2011-05-31
    • 2011-06-14
    • 2017-01-13
    • 2011-09-18
    • 2016-07-10
    • 1970-01-01
    相关资源
    最近更新 更多