メモリ管理の考え方と ARC MemoryMgmt
Advanced Memory Management Programming Guide から引用
Objective-C ではインスタンスへの参照回数が 1 以上であればメモリ領域が確保され続けインスタンスは生存し続けます。
ARC では上記の retain, release はコンパイラが自動で補完してくれます。よって、書くとエラーが出てビルド出来ません。
参照には 強参照 と 弱参照 があります。
参照先のオブジェクトのオーナーシップを持つ。自分がそのオブジェクトの参照を無くすまで確実に参照することができる。デフォルトこの設定
参照先のオブジェクトのオーナーシップを持たない。そのオブジェクトが破棄されたら参照できなくなる。delegate や blocks 使うときに主に使用
二つのオブジェクト間で相互に強参照を持つと循環参照が起き、解放されないオブジェクトがうまれる。
この場合、片方の参照を弱参照にして回避します。
//ParentObjectのインスタンスへの強参照をparentObjが所持
let parentObj: ParentObject = ParentObject()
//ChildObjectのインスタンスへの強参照をchildObjが所持
let childObj: ChildObject = ChildObject()
//parentObjのインスタンス変数がchildObjへの強参照を保持
parentObj.object = childObj
//childObjのインスタンス変数がparentObjへの強参照を保持
childObj.object = parentObj
//parentObjがnilになるので、parentObjがParentObjectのインスタンスへの参照を解除(解放)
//childObjがnilになるので、、childObjがChildObjectのインスタンスを解放
//parentObj.objectがChildObjectのインスタンスの強参照を保持
//childObj.objectがParentObjectのインスタンスの強参照を保持