広告スペース(バナー)
🍎Objective-C レッスン
基本文法の基礎8▾
データ構造とオブジェクト指向7▾
構文の基本を深める9▾
関数とデータ構造の応用9▾
アルゴリズムとテストの基礎8▾
文字列・数値操作の応用8▾
実務で役立つ機能8▾
レッスン 40 / 68
浅いコピーと深いコピーの違い
このレッスンでは、Objective-Cにおける浅いコピーと深いコピーの違いを学び、意図しないデータの共有によるバグを防げるようになることを目標にします。「Objective-C 浅いコピー 深いコピー」で調べている方向けです。
Objective-Cのオブジェクトを別の変数に代入すると、実は「同じものを指す参照」がコピーされます。これが「浅いコピー」の状態で、片方を変更するともう片方にも影響します。
サンプルコードでは、NSMutableDictionary *shallow = original;によりshallowはoriginalと同じ辞書インスタンスを指すようになります。そのためshallow[@"city"] = @"大阪"と変更すると、original[@"city"]を表示した際にも「大阪」に変わってしまう様子を確認できます。
初心者がよくつまずくのが、「コピーしたはずなのに、元のデータまで書き換わってしまった」というバグです。独立したコピーが欲しい場合はmutableCopyやcopyを明示的に呼び出す必要があります。
実際の開発現場では、参照型のオブジェクトの扱い方を理解することが、Objective-Cのメモリの動きを正しく扱ううえで避けて通れない重要な知識です。
📖 お手本コード
✍️ あなたのコード
コードを書いたら「実行する」を押してください
🧪 このサイトではObjective-Cを直接コンパイル・実行できないため、お手本コードと同じ内容を入力できたかをその場で判定します(採点はブラウザ内だけで行われ、どこにも送信されません)。
🎯
ここまでできればゴール達成!
元のデータを壊さずに、安全に複製できるようになります。
元のデータを壊さずに、安全に複製できるようになります。
広告スペース(バナー)
広告スペース(記事内)