Swift 岩心数据或出口收集的轻微泄漏

Swift 岩心数据或出口收集的轻微泄漏,swift,core-data,memory-leaks,nsfetchrequest,Swift,Core Data,Memory Leaks,Nsfetchrequest,几天后,我仍然无法找出为什么使用executeFetchRequest会导致一个小内存泄漏,如仪器:泄漏。我完全知道UIKit有很多漏洞,但我想至少试着更好地理解它 每当我执行一个fetch请求时,只要我不将它分配给类属性,它就不会泄漏。为了更好地解释这一点,我创建了一个新项目,如下所示: class TestViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { @IBOutlet

几天后,我仍然无法找出为什么使用
executeFetchRequest
会导致一个小内存泄漏,如仪器:泄漏。我完全知道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秒后仪器中会出现泄漏(见下面的屏幕截图)


在进行更多测试后,创建
出口收集
也会导致轻微泄漏。经过几天的搜索,似乎没有多少人有同样的问题。我想知道我是做错了什么,还是应该忽略这一点?泄漏的大小没有那么大(大约100字节)。

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


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

关于内存泄漏的问题, 看

Joe Collins提到的解决方法是:


“…将[UIButton]!替换为NSArray!并在以后使用时将其内容强制转换为UIButton。”

我在分析内存泄漏时也注意到了这一点,并对没有其他堆栈溢出帖子感到困惑。现在,我决定单独添加所有iboutlet,然后使用计算出的var返回outlet集合。至少这样,泄漏不会出现在仪器上。你自己试试看。