簡體   English   中英

Swift閉包變量導致內存泄漏

[英]Swift closure with variable causing memory leak

我正在調試我的程序存在內存泄漏問題。 在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叫。 所以我認為這條線是導致問題的原因。

對於回叫對象 - 對象。 它來自以下代碼:

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中我將一個委托分配給不是弱引用的單元格...

所以這與封閉無關

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM