まとまりのないブログ

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

    xcode の Code Sign error

    しばらく振りにアプリのアップデートをするために実機テストをしてみたところprovisioning profileのエラーが出てビルドできなくなっていた。あたらしいファイルをダウンロードしてxcodeで …

    no image

    dyld: Library not loaded: @executable_path

    dyld: Library not loaded: @executable_path/../Frameworks/Connection.framework/Versions/A/Connection …

    no image

    ZeroLink: unknown symbol '_NSApplicationMain'

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

    no image

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

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

    no image

    cocoa xcode – Undefined Symbols

    xcodeでのビルドエラーについて。フレームワークのオブジェクトが未定義(Undefined Symbols)扱いをされてしまう問題について。フレームワークの追加は問題はない。入力補完でも候補として挙 …