Warum gibt die Initialisierung an weak var
die Variable als nil
zurück, während die Initialisierung auf die üblichen var
das erwartete Ergebnis zurückgibt? Im folgenden Code auf ViewController.swift
:Warum gibt die Initialisierung zu "weak" in Swift "nil" zurück?
weak var myButton: UIButton!
var myButtonNotWeak: UIButton!
override func viewDidLoad() {
let frame = CGRect(x: 0, y: 0, width: 100, height: 100)
myButton = UIButton(frame: frame)
myButtonNotWeak = UIButton(frame: frame)
print("\(myButton), \(myButtonNotWeak)")
}
Dies meldet nach dem an die Konsole:
nil, <UIButton: 0x7f946bc424a0; frame = (0 0; 100 100); opaque = NO; layer = <CALayer: 0x7f946bc42920>>
Aber warum hat die erste Rückkehr nil
? Ich denke, wenn Sie eine Variable wie weak
definieren, wenn der View-Controller, der die "schwache Variable" (self
in diesem Fall) definiert hat, weg ist, ist die "schwache Variable" in Übereinstimmung damit gegangen. Ich glaube jedoch, dass ich die Instanz des ViewControllers nicht im Code nil
, insbesondere innerhalb seiner viewDidLoad()
Methode, entferne.
Also, wenn ich es richtig bekomme, warum gibt die "geschwächte Variable" nil
zurück, wenn initiiert? Wenn ich es mit @IBOutlet
benutze, dann wird es nicht nil
(aber ich muss es nicht explizit in distantiate). Und sollte ich die Instanzvariable ohne weak
definieren, wenn ich sie aus dem Code entfernen möchte, besonders innerhalb von viewDidLoad()
?
Ich möchte die Variable außerhalb von viewDidLoad()
beibehalten, weil ich auf die Instanz von anderen Methoden verweisen möchte. Was ist der beste Weg in diesem Fall?
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/ProgrammingWithObjectiveC.pdf Seite 62: Das neu zugewiesene Objekt hat keine starken Verweise darauf, daher wird es sofort freigegeben und someObject ist auf Null setzen. –
In Swift gibt es zwei Arten von schwachen Referenzen: schwach ist das gleiche wie in Objective-C und unowned. Der Unterschied besteht darin, dass eine unbenannte Referenz niemals null sein kann. – gabbler