iOS開発でメモリ管理について学びたいと思っています。ですのでDeinit and Memory leakと混同しました
class Human {
var passport: Passport?
let name: String
init(name: String) {
self.name = name
}
deinit {
print("I'm gone, friends")
}
}
我々は、インスタンスを作成した後、参照カウントが1である:私はこの記事/チュートリアル読み:そのチュートリアルでMake Memory Management Great Again
を、このようなクラスの内部deinit
方法があり、強い参照。このステップまで、私は理解しています。
var bob: Human? = Human(name: "Bob Lee")
私たちがインスタンスを作成すると、実際にはRAMにスペースが必要です。
変数 'bob'にnilを指定すると、デイニットが印刷され( "I'm gone、friends")、リレーションシップは存在しなくなるため、参照カウントは0になり、両方のオブジェクトの割り当てが解除されます。
私は混乱して作る事:私は従って、私は私のクラスで「deinit」を見ることはない、と私はインスタンスにnilを割り当てることはありませんチュートリアルから/私の実際のコードで
を、そのオブジェクト割り当てが解除されることはありませんし、脂肪のような私の記憶の中にスペースを取るでしょうか?私は自分のコードでdeinitを書くべきですか?自動参照がオブジェクトであるかどうかを示すために数える
:私はスペースの制限上、それはデータオブジェクトで満たされるでしょうし、最終的に私のアプリが
を破るならばと思うので、それはと言われてまだ が使用されているかはもはやもはや
必要を必要としませんか?どういう意味ですか?
var bob: Human? = Human(name: "Bob Lee")
// bob now has a reference count of 1
// the memory at the bob location is ready to access and/or modify
// this means bob is still alive and we can find out things about him
print(bob!.name)
// prints "Bob Lee"
bob = nil
// deinit called, "I'm gone, friends"
// bob now has a reference count of 0, and ARC has released the object that was stored here
// we cannot find out anything about bob
// the memory at the location of bob is now released
print(bob!.name)
// Error: Unexpectedly found nil while unwrapping optional value
のご質問にお答えするには:ちょうどあなたの例から明確にする
[新しい自動参照カウントメカニズムはどのように機能しますか?](https://stackoverflow.com/questions/6385212/how-does-the-new-automatic-reference-counting-mechanism-work) –