問題タブ [nscopying]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1307 参照

objective-c - NSCopying と copyWithZone: - [自己保持] または何かを返す必要がありますか?

copyWithZone を理解するのに苦労しています。

コピーを返すことになっていることはわかっていますが、オブジェクトを辞書に追加すると、「copyWithZone」オブジェクトが辞書に追加されます。実際のコピー (つまり、新しいオブジェクト) を作成すると、辞書に追加されたオブジェクトは同じオブジェクトにはなりません。ただし、保持カウントを増やすだけでは、技術的にはコピーではありません。

自分自身を保持するか、実際のコピーを作成する必要がありますか?

0 投票する
2 に答える
132 参照

objective-c - NSArray の最後のオブジェクトの複製に関する質問

MyObjects の NSArray があります。

配列の最後のオブジェクトを複製したい。つまり、最後のオブジェクトとまったく同じ配列に新しいオブジェクトを追加したいと考えています。

私が試した:

しかし、コピー メソッドは NSObject に実装されていないため、使用できないことに気付きました。

MyObject クラスに copy メソッドを実装し、MyObject の新しいインスタンスを返し、次のようにコードを変更する必要があります。

それとも他のソルトインはありますか?

UPDATE NSObjectのドキュメントから

NSObject 自体は NSCopying プロトコルをサポートしていません。サブクラスはプロトコルをサポートし、copyWithZone: メソッドを実装する必要があります。copyWithZone: メソッドのサブクラス バージョンは、サブクラスが NSObject から直接派生しない限り、最初にスーパーにメッセージを送信してその実装を組み込む必要があります。

0 投票する
2 に答える
2628 参照

objective-c - NSCopying、copyWithZoneおよびNSDictionary

まず、NSCopyingを正しく理解したことを確認したい...

単純なNSObjectサブクラスをNSDictionaryのキーとして使用するには、NSCopyingプロトコルを実装する必要があります。コピーされたインスタンスのcopyWithZoneメソッドで、クラスの新しいインスタンスを割り当て/初期化し、そのプロパティをコピーされたインスタンスと同じになるように設定して、それを返す必要があります。

次に、NSDictionaryがインスタンス自体ではなく、追加されたインスタンスのコピーを使用するのはなぜですか?

0 投票する
5 に答える
1644 参照

objective-c - NSCopying の実装中にゾーンが常に nil になるのはなぜですか?

単純な質問かもしれませんが、なぜ私のクラスに NSCopying プロトコルを実装するのですか? zone == nilとなります。

これは、オブジェクトを含むコピー配列に対してこのメ​​ソッドを使用して呼び出されます。

0 投票する
1 に答える
189 参照

iphone - CoreData から削除された後でも CoreData の結果配列を保存する

レコードを配列に保存し、CoreData から削除したいと考えています。NSCopying を使用してみましたが、NSManagedObject では copyWithZone が機能しないようです。私は本当に立ち往生しています。どんな助けでも大歓迎です。

0 投票する
1 に答える
142 参照

objective-c - 割り当てでコピーメソッドが使用されている場合、データ型はチェックされません

コピーについて疑問があります

概要:

  • Car私は2つのクラスを持っていますMutableCar
  • これらのクラスは両方ともプロトコルに準拠していますNSCopying
  • このメソッドcopyは、次のインスタンスを返します。Car

質問

  1. コンパイラが次のステートメントのコンパイルエラーをスローしないのはなぜですか?

    MutableCar* c2 = [c1 copy];

    コンパイラーを使用すると、Car*をMutableCar*ポインター変数に割り当てることができます。

  2. コンパイル時にこれが見過ごされないようにする方法はありますか?

    以下の例に示すように、これにより実行時にクラッシュが発生する可能性があります。

コード(別のファイル)

注意点-自動参照カウント(ARC)が使用されます

Car.h

Car.m

MutableCar.h

MutableCar.m

test.m

0 投票する
1 に答える
923 参照

cocoa - copyWithZone: の「ゾーン」の意味は何ですか?

Chung による「Pro. Objective-C Design Patterns for iOS」を調べていたところ、

_sharedSinglton = [[super allocWithZone: NULL] init];

NSCopyingに関する Apple のドキュメントも調べましたが、ZONE の実際の意味がよくわかりません。

0 投票する
1 に答える
587 参照

nsmutablearray - NSMutableArray をプロパティにコピーできません

このサイトと他のサイトの両方で配列のコピーに関する無数の質問を読みましたが、私が抱えている問題に直接対処するものはありません。

arrXTurbulenceValues というプロパティを宣言して合成しました。

ViewDidLoad() メソッドで配列を初期化しています。

一部の処理は、値が NSMutableArray に格納されるメソッドで発生します。その処理の最後に、次のコードを使用して、NSMutableArray を NSArray プロパティにディープ コピーしようとしています。

コピーは失敗し、self.arrXTurbulenceValues は nil のままです。コピーしようとしている tempXvalues 配列に含まれる 1900 以上の NSString オブジェクトがあります。

私は何を間違っていますか?ViewDidLoad() で初期化せずに & を使用してコードをコピーしようとしました。また、プロパティを NSArray と NSMutableArray の両方として構成しようとしました。

NSString は NSCopying に応答しますか? ドキュメントを正しく読んでいれば、そう思われます。

Objective C に結合された iOS 環境は悪夢です。あれほど扱いにくいものは見たことがありません。うーん。

0 投票する
2 に答える
3353 参照

iphone - copy または copyWithZone: またはその両方をオーバーライドしますか?

Apple のドキュメントを見て、Cocoa のデザイン パターンを読んで混乱しています。の Apple ドキュメントにはcopyWithZone:、次のように書かれています。

このメソッドが存在するのは、NSCopying プロトコルに準拠するオブジェクトが必要な状況でクラス オブジェクトを使用できるようにするためです。たとえば、このメソッドを使用すると、クラス オブジェクトを NSDictionary オブジェクトのキーとして使用できます。このメソッドをオーバーライドしないでください。

それは次のcopyとおりです。

これは、NSCopying プロトコルを採用するクラスの便利なメソッドです。copyWithZone: の実装がない場合、例外が発生します。

NSObject 自体は NSCopying プロトコルをサポートしていません。サブクラスはプロトコルをサポートし、copyWithZone: メソッドを実装する必要があります。copyWithZone: メソッドのサブクラス バージョンは、サブクラスが NSObject から直接派生しない限り、最初にメッセージをスーパーに送信してその実装を組み込む必要があります。

Cocoa デザイン パターンの例では、プロトコルに準拠している場合はオーバーライドしますが、オーバーライドcopyWithZone:mutableCopyWithZone:ません。カスタムサブクラスをキーとして 使用したい場合、それは私がすべきことですか?copyNSCopyingNSDictionary

または、オーバーライドしますcopyか?

同様に、私がそうする場合、それは私のカスタムサブクラス[myClass copy]を呼び出しますcopyWithZone:か? copyありがとう。