我正在调试我的程序,发现内存泄漏问题。
在ViewController中,当它弹出时,应该调用deinit函数。但事实并非如此,所以我尝试通过以下步骤来解决这个问题。
通过注释多行,我发现以下几行使得 ViewController 没有释放。
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()
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)