Утечка памяти в ReactiveCocoa - CocoaAction of UIButton предотвращает деинициализацию объекта MVVM - PullRequest
0 голосов
/ 05 декабря 2018

Я использую MVVM + ReactiveCocoa.

Мой код работает как положено.За исключением того, что ViewModel объект остался в «Графике отладочной памяти», когда я удалил ViewController из родительского объекта.ViewController deinited, в отличие от ViewModel.

Вот как выглядит действие кнопки в ViewModel:

var changeStatus: Action<Book.Status, Void, NoError> {
    return Action<Book.Status, Void, NoError> { status -> SignalProducer<Void, NoError> in
        return SignalProducer<Void, NoError> { [weak self] observer, error in
            if let strongSelf = self {
                strongSelf.status.value = status
                observer.sendCompleted()
            }
        }
    }
}

Назначение действия кнопке в ViewController:

* 1015Кнопка *

reading также остается в памяти.

Когда я прокомментировал назначение действия кнопке ViewModel, успешно отменено.Таким образом, я пришел к выводу, что это проблема.Возможно ли, что в этой строке хранятся надежные ссылки?

Уважаемое сообщество! Есть ли способ добавить действие кнопки с ReactiveCocoa, чтобы объект ViewModel был удален вовремя?

1 Ответ

0 голосов
/ 11 декабря 2018

Попробуй это. lazy определяя ваше действие, вы гарантируете, что его закрытие не будет сохранено.

lazy var changeStatus: Action<Book.Status, Void, NoError> = {
    return Action<Book.Status, Void, NoError> { status -> SignalProducer<Void, NoError> in
        return SignalProducer<Void, NoError> { [weak self] observer, error in
            if let strongSelf = self {
                strongSelf.status.value = status
                observer.sendCompleted()
            }
        }
    }
}()
...