Weekly Swift articles, podcasts and tips by John Sundell.

Setting up tests to avoid retain cycles with weak references

Published on 22 Aug 2017
Basics article available: Memory Management

Here's an easy way to setup a test to avoid accidental retain cycles with object relationships (like weak delegates and observers) in Swift:

func testDelegateNotRetained() {
    // Assign the delegate (weak) and also retain it using a local var
    var delegate: Delegate? = DelegateMock()
    controller.delegate = delegate
    XCTAssertNotNil(controller.delegate)
    
    // Release the local var, which should also release the weak reference
    delegate = nil
    XCTAssertNil(controller.delegate)
}