2

私は 3 つのクラス A、B、C を持っています。A には rA というリソースがあります。私が達成しようとしているのは、これらすべてのインスタンスがまったく同じリソースへの参照を持っていることです。

Swift 用語で具体的に説明すると、次のようになります。

クラス A には foo というプロパティがあります。

private var foo : [Bar] = [Bar]() // shared resource

クラス B には、 inout パラメータとしてイニシャライザに渡される foo というプロパティがあります。

private var foo : [Bar]!
init(inout foo:[Bar]){
    self.foo = foo
}

クラス C はクラス B に類似しています

fooクラス A からクラス B (または C)にパスすると、アドレスが変わるのはなぜですか?

AI では、次のように B (または C) に渡します。

let b = B(foo: &self.foo)

Aでの初期化後にアドレスを出力するfooと、Bでの割り当て後とは異なるアドレスが得られます。

class A{
    private var foo = [Bar]()
    func someFunc(){
        NSLog("\n\n [A] \(unsafeAddressOf(self.foo))\n\n") // different from output in B
        let b = B(foo: &self.foo)

    }
}

class B{
    private var foo: [Bar]!
    init(inout foo: [Bar]){
         self.foo = foo
         NSLog("\n\n [B] \(unsafeAddressOf(self.foo))\n\n")
    }
}

これが事実である理由はありますか?

4

1 に答える 1