Last active
December 4, 2017 06:05
-
-
Save SunXiaoShan/f6523a5ac900fcaacd1793b6006fac20 to your computer and use it in GitHub Desktop.
DemoSwiftLeak
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import XCTest | |
@testable import DemoWeak | |
class DemoWeakTests: XCTestCase { | |
override func setUp() { | |
super.setUp() | |
// Put setup code here. This method is called before the invocation of each test method in the class. | |
} | |
override func tearDown() { | |
// Put teardown code here. This method is called after the invocation of each test method in the class. | |
super.tearDown() | |
} | |
func testDelegateMemoryLeak() { | |
let controller = ViewController() | |
var observer = ObserverMock() | |
weak var weakObserver = observer | |
controller.addObserver(weakObserver!) | |
observer = UIPageViewControllerDelegateMock() | |
XCTAssertNil(weakObserver) | |
} | |
func ObserverMock() -> ManagerObserver { | |
return ManagerObserver() | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class UserManager { | |
private var observers = [ObserverWrapper]() | |
public func addObserver(_ observer: ManagerObserver) { | |
let wrapper = ObserverWrapper(observer: observer) | |
observers.append(wrapper) | |
} | |
} | |
private extension UserManager { | |
struct ObserverWrapper { | |
weak var observer: ManagerObserver? | |
} | |
} | |
// define ManagerObserver | |
class ManagerObserver: NSObject, UIPageViewControllerDelegate { | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
protocol UIPageViewControllerDelegate { | |
} | |
class ViewController: UIViewController { | |
private var observers = UserManager() | |
func addObserver(_ observer: ManagerObserver) { | |
observers.addObserver(observer) | |
} | |
override func viewDidLoad() { | |
super.viewDidLoad() | |
// Do any additional setup after loading the view, typically from a nib. | |
} | |
override func didReceiveMemoryWarning() { | |
super.didReceiveMemoryWarning() | |
// Dispose of any resources that can be recreated. | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment