gpt4 book ai didi

ios - 带有导致内存泄漏的变量的Swift闭包

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

我正在调试存在内存泄漏问题的程序。在 ViewController 中,当弹出时,应该调用 deinit 函数。但事实并非如此,所以我尝试通过以下步骤解决这个问题。

通过注释多行,我发现以下几行使 ViewController 没有 dealloc。

var api:APIGetList = APIGetList(tripId: trip.id, offsetToken: offsetToken,shouldRemoveAll:self.shouldRemoveAll)
api.request({ (obj, error) -> Void in
//ingore here
}, immediateHandler: {[unowned self](obj) -> Void in
if var tripPosts = obj as? [TripPost]{
self.tripPosts = tripPosts<--- this line cause the leak
}
self.tableView.reloadData()

}, failHandler: { (errCode, errMsg, error) -> Void in
self.isLoading = false
self.refreshControl.endRefreshing()
})

在我的 ViewController 中,我将调用 api 来获取数据,并替换当前的 tripPosts 列表。我提到的那一行“这条线导致泄漏”,当我评论它时,deinit 被调用了。所以我认为这条线是问题的原因。

为回调对象——obj。它来自以下代码:

var tripPosts = [TripPost]()
tripPosts = TripPost.MR_findAll()
immediateHandler(obj: tripPosts)

那么是什么导致了内存泄漏??

最佳答案

尝试在 api.request({ in

  var api:APIGetList = APIGetList(tripId: trip.id, offsetToken: offsetToken,shouldRemoveAll:self.shouldRemoveAll)

api.request({ [weak self](obj, error) -> Void in
//ingore here
}, immediateHandler: {[weak self](obj) -> Void in
if var tripPosts = obj as? [TripPost]{
self.tripPosts = tripPosts<--- this line cause the leak
}
self.tableView.reloadData()

}, failHandler: {[weak self] (errCode, errMsg, error) -> Void in
self.isLoading = false
self.refreshControl.endRefreshing()
})

关于ios - 带有导致内存泄漏的变量的Swift闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31696417/

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