Быстрая утечка памяти

Мы пытаемся использовать структуры Swift там, где можем. Мы также используем RxSwift, который имеет методы, которые принимают замыкания. Когда у нас есть структура, которая создает замыкание, которое относится ксам, что создаетсильный референсный цикл.

import Foundation
import RxSwift

struct DoesItLeak {

    var someState: String = "initial value"
    var someVariable: Variable<String> = Variable("some stuff")

    let bag = DisposeBag()

    mutating func someFoo() {

        someVariable.subscribeNext { person in

            self.someState = "something"
        }
        .addDisposableTo(bag)
    }
}

Откуда я это знаю? Если я создаю 100 000 объектов DoesItLeak и вызываю someFoo () для каждого из них, я считаю, что у меня есть 100 000 объектов с сильными ссылочными циклами. Другими словами, когда я избавляюсь от массива DoesItLeak, содержащего эти объекты, объекты остаются в памяти. Если я не вызываю someFoo (), проблем нет.

Переменная является классом. Итак, я могу видеть эту проблему с памятью, используя Распределение инструментов xcode и фильтрацию вПеременная <String>

Если я пытаюсь использовать [слабое Я], например, в следующем, я получаю ошибку компилятора:

someVariable.subscribeNext { [weak self] person in

Ошибка компилятора: «Слабый не может быть применен к не классу»

В реальном / не-примерном коде мы обращаемся к методам и переменным через себя, и это проблема памяти.

Как я могу решить эту проблему с памятью, сохраняя IsItLeak в виде структуры?

Спасибо за вашу помощь.

Ответы на вопрос(3)

Ваш ответ на вопрос