2

現在保持されているNSArrayにあるオブジェクトでプロパティを設定する場合、ポインタ(軽量)のみを格納しますか、それともコンテンツをプロパティにコピーしますか?

私の知る限りでは、ポインタを割り当てるだけのようですが、よくわかりません。

また、どのような状況で* pointer = * otherPointerまたはsetメソッド(たとえば、setDelegate)を使用すると、ポインターがあればそれを渡すのではなく、値をコピーします。常にポインタアドレスを渡すだけではいけませんか?

4

1 に答える 1

3

あなたが言ったように、それは常にポインタを渡します。参照解除記号を具体的に追加しない限り、これは常に当てはまります。

ただし、クラスにプロパティを追加し、セッターをcopy次のように設定すると、次のようになります。

@property (nonatomic, copy) id obj;

ドット構文またはセッターを使用する場合、これは次のように変換されます。

_obj = [otherObj copy];

NSObjectここでは、問題のオブジェクトがそれ自体のコピーをサポートするか、それともそのスーパークラスまたは別の中間クラスのコピーにフォールバックするかによって異なります。

さらに、Collectionクラスはオブジェクトへの参照のみをコピーするため、浅いコピーNSDictionaryNSArray実行するため、同じオブジェクトのセットを指す2つのコレクションがあります。

于 2012-08-11T00:58:27.880 に答える