trying to fix memory leak

Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
Matt Bruce 2022-08-15 09:06:48 -05:00
parent 01cfa940c7
commit 80e23e190a
3 changed files with 53 additions and 46 deletions

View File

@ -12,6 +12,10 @@ import VDSColorTokens
import Combine import Combine
class CheckboxViewController: UIViewController, StoryboardInitable { class CheckboxViewController: UIViewController, StoryboardInitable {
deinit {
print("\(Self.self) deinit")
}
enum PickerType { enum PickerType {
case surface case surface
} }
@ -73,20 +77,19 @@ class CheckboxViewController: UIViewController, StoryboardInitable {
//create the subject //create the subject
let modelSubject = CurrentValueSubject<DefaultCheckboxModel, Never>(model) let modelSubject = CurrentValueSubject<DefaultCheckboxModel, Never>(model)
//assign - this will auto overwrite any changes
modelSubject.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main).assign(to: \.model, on: self).store(in: &subscribers)
//bind //bind
checkbox.createBinding(with: modelSubject, storeIn: &subscribers) checkbox.createBinding(with: modelSubject, storeIn: &subscribers)
//update the model
//print out on subject changes //print out on subject changes
modelSubject.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main).sink { [weak self] model in modelSubject
.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main)
self?.showErrorSwitch.isOn = model.hasError .sink { [weak self] updatedModel in
print("CheckboxViewController hasError: \(model.hasError)") self?.model = updatedModel
print("CheckboxViewController selected: \(model.selected)") self?.showErrorSwitch.isOn = updatedModel.hasError
print("CheckboxViewController hasError: \(updatedModel.hasError)")
}.store(in: &subscribers) print("CheckboxViewController selected: \(updatedModel.selected)")
}.store(in: &subscribers)
} }

View File

@ -12,6 +12,10 @@ import VDSColorTokens
import Combine import Combine
class RadioButtonViewController: UIViewController, StoryboardInitable { class RadioButtonViewController: UIViewController, StoryboardInitable {
deinit {
print("\(Self.self) deinit")
}
enum PickerType { enum PickerType {
case surface case surface
} }
@ -27,8 +31,8 @@ class RadioButtonViewController: UIViewController, StoryboardInitable {
@IBOutlet weak var childTextField: UITextField! @IBOutlet weak var childTextField: UITextField!
@IBOutlet weak var showErrorSwitch: UISwitch! @IBOutlet weak var showErrorSwitch: UISwitch!
// var radioButton: RadioButton! // var radioButton: RadioButton!
// var radioButton2: RadioButton! // var radioButton2: RadioButton!
var radioButtonGroup = RadioButtonGroup() var radioButtonGroup = RadioButtonGroup()
public var model = DefaultRadioButtonGroupModel() public var model = DefaultRadioButtonGroupModel()
public var subscribers = Set<AnyCancellable>() public var subscribers = Set<AnyCancellable>()
@ -80,25 +84,25 @@ class RadioButtonViewController: UIViewController, StoryboardInitable {
//create the subject //create the subject
let modelSubject = CurrentValueSubject<DefaultRadioButtonGroupModel, Never>(model) let modelSubject = CurrentValueSubject<DefaultRadioButtonGroupModel, Never>(model)
//assign - this will auto overwrite any changes
modelSubject.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main).assign(to: \.model, on: self).store(in: &subscribers)
//bind //bind
radioButtonGroup.createBinding(with: modelSubject, storeIn: &subscribers) radioButtonGroup.createBinding(with: modelSubject, storeIn: &subscribers)
//update the model
//print out on subject changes //print out on subject changes
modelSubject.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main).sink { [weak self] model in modelSubject
.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main)
.sink { [weak self] updatedModel in
self?.model = updatedModel
self?.showErrorSwitch.isOn = updatedModel.hasError
print("RadioButtonViewController hasError: \(updatedModel.hasError)")
self?.showErrorSwitch.isOn = model.hasError if let selectedModel = updatedModel.selectedModel {
print("RadioButtonViewController hasError: \(model.hasError)") print("RadioButtonViewController selectedModel Id: \(selectedModel.id)")
}
if let selectedModel = model.selectedModel {
print("RadioButtonViewController selectedModel Id: \(selectedModel.id)")
} }
}.store(in: &subscribers) .store(in: &subscribers)
} }
var radioButton: RadioButton? { var radioButton: RadioButton? {
radioButtonGroup.selectorViews.first radioButtonGroup.selectorViews.first
} }

View File

@ -34,9 +34,6 @@ extension Bindable {
} }
class TextFieldBindingCell: UIView, Bindable { class TextFieldBindingCell: UIView, Bindable {
deinit {
print("\(Self.self) deinit")
}
//bindable //bindable
var model: User var model: User
@ -100,6 +97,9 @@ class TextFieldBindingCell: UIView, Bindable {
} }
@objcMembers class TestViewController: UIViewController, Initable { @objcMembers class TestViewController: UIViewController, Initable {
deinit {
print("\(Self.self) deinit")
}
var user = User(firstName: "Joe", lastName: "User") var user = User(firstName: "Joe", lastName: "User")
private var subscriptions = Set<AnyCancellable>() private var subscriptions = Set<AnyCancellable>()