MyClass
とmyClosure
が互いに参照するため、次のようにメモリリークが発生することがわかります。このクロージャがメモリリークを引き起こしますか?
var MyClass {
var myVar = 0
let myClosure: (Int) -> Void
init() {
self.myClosure = { x in
self.myVar = x
}
}
}
また、次のこともメモリリークの原因になりますか?なぜ、なぜそうではないのですか?
var MyClass {
var myVar = 0
function myFunc() {
let myClosure = { x in
self.myVar = x
}
myClosure(0)
}
}
割り当て解除自己の呼び出しを回避するために、メモリリークを回避し、自己を守るために、弱い自己を宣言し、この場合の自己割り当てを解除することはできません。 execの悪いアクセスを引き起こす可能性がある唯一のケースは、所有されていない自己を使用する場合です。 – stefos
実際には、関数が終了するまでは割り当て解除が開始されないため、この方法がより効果的です – Daniel