来自libswiftCore.dylib的UITableviewController内存泄漏

时间:2015-08-08 02:40:18

标签: ios swift uitableview memory-leaks

无法弄清楚这个漏洞。 2个小时后,我求助于你。

当我回到我的桌面视图时,我一直在泄漏。我正在使用自定义tableview单元格。

from sklearn.datasets import make_moons
makemoons()

我在自定义单元格中确实有一个fillData方法,但是因为我认为我可能是原因而把它移出去了 - 事实并非如此。这是单元格

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! ClientTableViewCell
    var client = SharedData.sharedClientList[indexPath.row]
    //cell.fillData(client)

    cell.nameLabel.text = client.clientName

    var tempNeeds = client.needsAsOneStringList()

    var multipleWord = tempNeeds.removeAtIndex(0)

    var others = " | ".join(tempNeeds)
    cell.needLabel.text = "\(multipleWord) \(others)"

    cell.foundAddressLabel.text = "Map Location: \(client.placemark.subThoroughfare) \(client.placemark.thoroughfare) \(client.placemark.locality) \(client.placemark.postalCode)"
    cell.expectedAddressLabel.text = "Searched Location: \(client.importedAddress)"

    cell.hidden = false
    cell.accessoryType = .None

    if !client.isBase {
        if client.clientsBaseAssociation != nil {
            cell.hidden = true
        }
    }
    else {
        cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator
        cell.expectedAddressLabel.text = ""
        cell.foundAddressLabel.text = "\(client.placemark.subThoroughfare) \(client.placemark.thoroughfare) \(client.placemark.locality) \(client.placemark.postalCode)"
    }

    return cell
}

iOS 8.4 / Xcode 6.4

enter image description here

enter image description here

更接近问题

enter image description here

1 个答案:

答案 0 :(得分:0)

显然(因为我没有文档来证明它)隐藏可重用的表格单元格(.hidden继承自UIView)泄漏内存。也许当隐藏时,它被认为不再可重复使用,而且也是非一次性的。在任何情况下,解决方案是停止使用该特定的细胞隐藏技术来管理表格视图,而是将未显示的单元格分组为“逻辑剪切”的部分。 - 也就是说,不再向dataSourcedelegate协议方法透露。 (例如,为部分计数返回少一个,或者为"隐藏"部分返回零单元数。)

如果一个人愿意做reloadSection()然后动态重新计算索引,那么逻辑剪辑也可以在一个部分内 单元格被遗漏但剩余的索引是连续的。根据底层模型的大小,可能需要使用Computer-Science-y来避免O(n ^ 2)重新索引算法。

在Code Review中遇到了Objective-C中的类似问题,但从未完全解释过:https://codereview.stackexchange.com/questions/42429/uitableview-hidden-section-causing-more-memory-allocations-every-time-on-pull