Swift: Assign a class method to a handler and handling weak self

BlackWolf

I just went memory-leak hunting in the app I am working on, and noticed that the following produces a memory leak:

class SubClass {

    var didCloseHandler: (() -> Void)?

}

class MainClass {

    var subClass = SubClass()

    func setup {
        subClass.didCloseHandler = self.didCloseSubClass
    }

    func didCloseSubClass() {
        //
    }

}

This produces a retain cycle, and for good reason - didCloseHandler captures MainClass strongly, and MainClass captures SubClass strongly.

My Question: Is there a way in Swift that allows me to assign a class method to a handler without a retain cycle?

And yes, I am aware that I can do this using subClass.didCloseHandler = { [weak self] self?.didCloseSubClass() }. I'm wondering, though, if it can be done without introducing a new closure.

M Ohamed Zead

make a weak reference of subClass in MainClass

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related