Avatar
ブロック内の特定の行でのカウント数は、エイリアス解析とかCode Motion最適化で結構変わるんですよね。同じコードを-O付きでコンパイルした結果↓ @swift-5.5.3 -O class Foo {} let foo = Foo() print("init Foo: refCount = \(_getRetainCount(foo))") do { var closure: (() -> ())? = { [bar = foo] in print("in closure: refCount = \(_getRetainCount(bar))") } print("before closure(): refCount = \(_getRetainCount(foo))") closure!() print("after closure?(): refCount = \(_getRetainCount(foo))") closure!() print("after closure?(): refCount = \(_getRetainCount(foo))") closure = nil } (edited)
😯 1