import Ġkotlinx . c interop .* Ċ import Ġkotlin . test .* Ċ import Ġobj c Tests .* Ċ Ċ @ Test Ċ fun Ġtest Try Ret ain GC () Ġ{ ĊĠĠĠ Ġkotlin . native . internal . GC . collect () ĊĠĠĠ Ġval Ġweak Ref Holder Ġ= ĠWeak Ref Holder () ĊĠĠĠ Ġcreate G arbage NS Objects ( weak Ref Holder ) ĊĠĠĠ Ġweak Ref Holder . obj Ġ= Ġobject Ġ: ĠNSObject () Ġ{} ĊĠĠĠ Ġ// ĠLoading Ġweak Ġref Ġtakes Ġa Ġlock . ĠIf ĠK / N Ġruntime Ġruns ĠGC Ġwhile Ġthe Ġlock Ġis Ġtaken , ĊĠĠĠ Ġ// Ġthen Ġit Ġreleases Ġgarbage Ġobjects Ġand Ġthus ĠObj - C Ġruntime Ġmight Ġtake Ġa Ġrecursive Ġlock ĊĠĠĠ Ġ// Ġand Ġabort Ġin Ġ_ os _ un fair _ lock _ recursive _ abort . ĊĠĠĠ Ġweak Ref Holder . load Many Times () Ċ } Ċ Ċ private Ġfun Ġcreate G arbage NS Objects ( weak Ref Holder : ĠWeak Ref Holder ) Ġ{ ĊĠĠĠ Ġautore lease pool Ġ{ ĊĠĠĠĠĠĠĠ Ġrepeat ( 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAssign ing Ġthe Ġobject Ġto Ġa Ġweak Ġreference Ġso ĠObj - C Ġwould Ġtake Ġa Ġlock Ġwhen Ġde alloc ating Ġit : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweak Ref Holder . obj Ġ= ĠNSObject () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġweak Ref Holder . obj Ġ= Ġnull ĊĠĠĠ Ġ} Ċ }