【发布时间】:2019-07-29 00:13:17
【问题描述】:
我的目标是创建一个包含数组的类。数组的元素将是同一类的方法。喜欢:
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 方法中使用函数的本地副本。
【问题讨论】:
-
为什么不将
functions变量声明为可选变量,并在执行后将其设置为 nil,因为您希望在之后释放它。
标签: arrays swift function-pointers swift4.2