弱变量和两个类之间指针的问题

时间:2016-08-26 13:40:50

标签: ios swift pointers weak-references

我正在使用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类。谁知道为什么?

}

1 个答案:

答案 0 :(得分:1)

所有关于变量创建的范围。在第一个示例中,您将在ViewController类的范围内创建一个新变量(weak myself)。然后你将那个弱变量传递给新类的函数并做任何你想做的事。

在第二个示例中,您将在新类范围内的函数内创建一个新变量(weak myself)。由于您使用强引用的self在新类中创建该变量,因此您在新类中有一个对ViewController的强引用。