例えば以下のようなコードのときに、parentとchildは循環参照してしまうのか。

class Parent {
  let child = Child()
  let name = "parent"

  func didLoad() {
    child.callback = hoge
  }

  func hoge() {
    print(name)
  }
}

class Child {
  var callback: (() -> Void)?
}

let parent = Parent()
parent.didLoad()

もし、循環参照してしまう場合、対策として、 weak var callbackと宣言するのが正しいのか。でもそうすると今度は無名のブロックが指定された場合即解放されてしまうと思うのだが、どっちでもうまくいく方法はあるか。