Setting up tests to avoid retain cycles with weak references
Basics article available: Memory ManagementHere'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)
}