gpt4 book ai didi

ios - 无法弄清楚为什么过早释放对象

转载 作者:搜寻专家 更新时间:2023-11-01 05:44:31 24 4
gpt4 key购买 nike

我正在实现一个非常简单的 TableView 。

创建 View 时,代码是这样的:

func selectFolder(path: String) {
var folderViewController = UITableViewController()
var dataSource = folderViewData(path: path)
folderViewController.tableView!.dataSource = dataSource // note I've confirmed that tableView is instantiated at this point
navController.pushViewController(folderViewController, animated: true)
}

我的数据源很简单; init() 看起来像这样:

class folderViewData: NSObject, UITableViewDataSource, UITableViewDelegate {

var rootFolder:String

init(path:String) {
rootFolder = path
DPLog("initializing folderViewDelegate")
super.init()
}

<dataSource methods snipped>
}

当它运行时,由于引用了一个已释放的对象,我得到了一个错误。当我运行 Instruments 寻找僵尸时,我得到这个错误:

An Objective-C message was sent to a deallocated 'dpScheme.folderViewData' object (zombie) at address: 0x7ff6516f5cf0.

我不知道如何以纯文本形式获取仪器信息,而且我没有足够的声誉来发布图像。简短的描述是方法“selectFolder”保留“folderViewData”一次并释放它两次。

有人能帮忙吗?

谢谢,

大卫

最佳答案

您需要以某种方式保留您的数据源,而 tableView 对其 dataSource 属性的弱引用是不够的。一旦 selectFolder 中的局部变量超出范围,数据源就会被释放。

这个问题的一个非常常见的解决方案是在 selectFolder 所在的类中放置一个强大的属性,并将数据源分配给该属性,这样它就会一直存在。

关于ios - 无法弄清楚为什么过早释放对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26166330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com