我正在使用内存泄漏问题调试我的程序。 在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)
那么是什么导致内存泄漏?
答案 0 :(得分:4)
在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()
})
答案 1 :(得分:2)
所以这与闭包无关