Моя цель - создать класс, который содержит массив.Элементами массива будут методы одного и того же класса.например:
class MyClass {
lazy var functions = [self.myFirstMethod, self.mySecondMethod]
deinit {
print("Deinit")
}
func myFirstMethod() {
// Do Something
}
func mySecondMethod() {
// Do Something
}
func executeAll() {
for f in functions {
f()
}
}
}
Когда я вызываю executeAll()
, он работает нормально, и я достигаю ожидаемого результата:
var myObject = MyClass()
myObject.executeAll()
Проблема в том, что создается эталонный цикл.Экземпляр MyClass
содержит массив functions
, а массив functions
содержит self
.Поэтому, если я напишу ниже код:
var myObject: MyClass? = MyClass()
myObject.executeAll()
myObject = nil
Он не будет вызывать метод deinit
из-за этого сильного ссылочного цикла.Как я могу добавить указатели метода в массив как weak self
?Я не хочу использовать локальную копию функций в методе executeAll
.