[解決済み] Objective-Cでオブジェクトをコピーする方法
2022-09-20 02:20:51
質問
それ自身のオブジェクトを持つカスタムオブジェクトをディープコピーする必要があります。NSCopying を継承する方法と NSCopyObject を使用する方法について、いろいろと読んでみましたが、少し混乱しています。
どのように解決するのですか?
参照型ではいつもそうですが、"copy" の概念が2つ存在します。私はあなたがそれらを知っていると確信していますが、完全性のために。
- ビット単位のコピー。これでは、単にメモリをビット単位でコピーしているだけです。これは、NSCopyObjectが行うことです。ほぼ常に、それはあなたが望むものではありません。オブジェクトは内部状態や他のオブジェクトなどを持っていて、そのデータへの参照を保持しているのは自分だけだという仮定をすることがよくあります。ビット単位のコピーではこの仮定が崩れます。
- 深い、論理的なコピー。Objective C のマニュアルでは、このようなオブジェクトをオリジナルから機能的に独立したオブジェクトと呼んでいます。このようなインテリジェントなコピーを作成するメカニズムはクラスによって異なるため、オブジェクト自体にその実行を依頼します。これがNSCopyingプロトコルです。
あなたは後者を望んでいます。もしこれがあなた自身のオブジェクトの1つであるなら、単にNSCopyingプロトコルを採用し、-(id)copyWithZone:(NSZone *)zoneを実装すればよいのです。どのようなことをしてもかまいませんが、自分自身の本当のコピーを作って、それを返すというのがアイデアです。自分のすべてのフィールドでcopyWithZoneを呼び出して、深いコピーを作るのです。簡単な例を挙げますと
@interface YourClass : NSObject <NSCopying>
{
SomeOtherObject *obj;
}
// In the implementation
-(id)copyWithZone:(NSZone *)zone
{
// We'll ignore the zone for now
YourClass *another = [[YourClass alloc] init];
another.obj = [obj copyWithZone: zone];
return another;
}
関連
-
[解決済み] Objective-CでNSStringsを連結するためのショートカット集
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] scpを使ってリモートからローカルにフォルダをコピーするにはどうしたらいいですか?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] カスタムオブジェクトを含むNSMutableArrayをソートするにはどうすればよいですか?
-
[解決済み] Objective-Cで、ある文字列が他の文字列を含んでいるかどうかを調べるにはどうすればよいですか?
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] Javaでオブジェクトをコピーするにはどうしたらいいですか?
-
[解決済み] dict.copy()を理解する - 浅いか深いか?
-
[解決済み] Objective-Cのクラス→文字列のようなものです。[NSArray className] -> @"NSArray" のようになります。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 現在の日付から7日分を差し引いた日数
-
[解決済み] Objective-Cで配列に結合する
-
[解決済み] Xcodeはクラッシュの原因となる行を表示しない
-
[解決済み] RootViewControllerのスイッチングアニメーション
-
[解決済み] NSPredicate: NSDateプロパティの日によるオブジェクトのフィルタリング
-
[解決済み] ARCを使用する場合、deallocでプロパティをnilに設定するのですか?
-
[解決済み] NSObject +loadと+initialize - これらは何をするのですか?
-
[解決済み] なぜObjective-Cはプライベートメソッドをサポートしないのですか?
-
[解決済み] Swiftでクラスをプロトコルに準拠させるには?
-
[解決済み] ベストプラクティス - 自分のプロジェクト/アプリのためのNSErrorドメインとコード