两个 类 之间的弱 var 和指针的问题
Problems with weak var and pointers between two classes
我正在使用 Swift 语言。
我在我的 viewcontroller class 中,我想在另一个 class 上存储一些东西,但我不希望 class 对我的 class。所以我正在使用 weak
。我正在尝试两种方法来做到这一点。一个有效(因为成功没有指向我的 viewcontroller class 的强指针),而另一个没有(指向我的 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 class。有人知道为什么吗?
}
这都是关于变量创建范围的。在您的第一个示例中,您在 ViewController class 的范围内创建了一个新变量 (weak myself
)。然后你将这个弱变量传递给新的 class 函数并做任何你想做的事。
在您的第二个示例中,您在新 class 范围内的函数内创建了一个新变量 (weak myself
)。由于您使用强引用 self
在新 class 中创建该变量,因此您在新 class.
中对 ViewController 有很强的引用
我正在使用 Swift 语言。
我在我的 viewcontroller class 中,我想在另一个 class 上存储一些东西,但我不希望 class 对我的 class。所以我正在使用 weak
。我正在尝试两种方法来做到这一点。一个有效(因为成功没有指向我的 viewcontroller class 的强指针),而另一个没有(指向我的 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 class。有人知道为什么吗?
}
这都是关于变量创建范围的。在您的第一个示例中,您在 ViewController class 的范围内创建了一个新变量 (weak myself
)。然后你将这个弱变量传递给新的 class 函数并做任何你想做的事。
在您的第二个示例中,您在新 class 范围内的函数内创建了一个新变量 (weak myself
)。由于您使用强引用 self
在新 class 中创建该变量,因此您在新 class.