我正在使用Swift语言。
我在我的viewcontroller类中,我想在另一个类上存储一些东西,但我不希望该类对我的类有任何强烈的指针。所以我正在使用weak
。我正在尝试两种方法来做到这一点。一个工作(如成功没有强大的指向我的viewcontroller类的指针),一个没有(指向我的viewcontroller的指针很强,即使我将其命名为weak
。
class MyViewController {
override func viewDidLoad() {
someOtherClass.function(someArgument) { [ weak myself = self ] in
myself?.someButton.text = "I got you captured, Mr. ViewController"
}
前面的代码成功地不让someOtherClass强烈指向MyViewController。然后我取出weak myself = self
并在函数本身中命名,如下所示:
class MyViewController {
override func viewDidLoad() {
someOtherClass.function(someArgument) {
weak let myself = self
myself?.someButton.text = "I got you captured, Mr. ViewController"
}
在这个例子中,someOtherClass强烈指向我的viewController类。谁知道为什么?
}
答案 0 :(得分:1)
所有关于变量创建的范围。在第一个示例中,您将在ViewController类的范围内创建一个新变量(weak myself
)。然后你将那个弱变量传递给新类的函数并做任何你想做的事。
在第二个示例中,您将在新类范围内的函数内创建一个新变量(weak myself
)。由于您使用强引用的self
在新类中创建该变量,因此您在新类中有一个对ViewController的强引用。