Swift结束variables导致内存泄漏

我正在debugging我的程序与内存泄漏问题。 在ViewController中,当它popup时,应该调用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来获取数据,并replace当前的tripPosts列表。 我提到的这条线是“这条线导致泄漏”,当我评论它时,deinit叫。 所以我认为这条线是问题的原因。

用于callback对象 – 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() }) 

哦…终于我知道了。 问题是行self.tableView.reloadData()< – 并在cellForTableView我分配一个委托给细胞,这是不是一个弱引用…

所以这与封闭无关