まとまりのないブログ

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

    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

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

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

    no image

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

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

    no image

    デリゲートメソッドを呼ぶにはデリゲートの設定がいる:- (void)applicationDidFinishLaunching:(NSNotification *)aNotification

    OS X 10.4.11 Xcode 2.4.1 でのこと。 cocoaでアプリケーションが起動した後に呼ぶapplicationDidFinishLaunchingがどうやっても呼ばれないから相当悩 …