まとまりのないブログ

something which something is something

objective-c

nsmutablearrayの参照コピー仕様

投稿日:

参照コピー・・・というものに慣れていなくて戸惑った。実体を複製するわけではなくて、実体のもつアドレスつまり参照だけコピーするので、コピーされたものに対して変更を加えようとするとコピー元のオリジナルに変更を加えることを意味する。

NSMutableArrayをコピーする場合は参照コピーになる。参照コピーではなくて、実体をコピーする、ハードコピーとかディープコピーとか呼ばれるコピーがしたくてその仕方を色々試してみた。
その方法は下記のようにいくつかある

  • [array mutablecopy]
  • [[NSMutableArray alloc] initWithArray:oldArray copyItems:YES]
  • NSArray* array = [NSKeyedUnarchiver unarchiveObjectWithData:
    [NSKeyedArchiver archivedDataWithRootObject:oldArray]]
  • 上記方法を試してみたが、結論からいうと全部ダメだった。私のやり方が悪いのかなんなのか。何をやっても参照コピーになってしまうので、最後の手段として力づくで複製することにした。つまりnewの段階から新しいオブジェクトを作って、コピー元の要素をループで回して新しいオブジェクトの中に入れるという方法。さすがにこの方法なら複製できる。

    -objective-c

    執筆者:


    comment

    メールアドレスが公開されることはありません。

    日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

    関連記事

    no image

    フレームワークの参照が難しすぎ

    mac os用のソフトウェアを作成するためにxcodeを使ってプログラミングをしようとしていたのだけれど、いつも通りプログラミングを始める前の環境構築に苦労した。既存のフレームワークを使うことで手早く …

    no image

    objective-cがなぜ難しいか

    ここ数日mac os用のアプリケーションを作成するためにobjective-cの勉強をしているのだけれど、どうもプログラムのコードの内容が理解できない。コードを読んでどのような処理が起こっているのかと …

    no image

    メソッドの呼び出しについて

    objective-cのメソッドの呼び出し方について調べてみたけれど、どうもよくわからない。定義されたメソッドがいつ、どこで呼ばれているのかということがコードを見渡しただけでは把握することができないた …

    no image

    iOSシミュレータ8.3のカメラロールに画像を追加する

    iOSシミュレータ8.3のカメラロールに画像を追加する方法を探ってみたが、見つからない。Finderからiphone simulatorを辿って・・・とやってみても当該の画像が置いてあるフォルダがどこ …

    no image

    ZeroLink: unknown symbol '_NSApplicationMain'

    [Session started at 2008-03-21 00:22:13 +0900.] ZeroLink: unknown symbol ‘_NSApplicationMain&# …