問題タブ [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 に答える
1739 参照

objective-c - NSCopyObject は有害と見なされますか?

の Xcode ドキュメントでNSCopyObjectは、特別な考慮事項のセクションに次のように記載されています。

この機能は危険であり、正しく使用することは非常に困難です。copyWithZone:サブクラス化できるクラスの一部として使用すると、非常にエラーが発生しやすくなります。GC または Objective-C 2.0 を使用している場合、ゾーンは完全に無視されます。

この機能は、Mac OS X 10.6 以降で非推奨になる可能性があります。

正しい使い方が難しいのはなぜですか?浅い (ビットごとの) コピーを実行します。オブジェクトはコピーまたは保持されません。ドキュメントはこれについてかなり明確です。

他の理由を見逃していない場合、オブジェクトの浅いコピーを実行するための推奨される代替手段は何ですか?

編集:

浅いコピーを実行する正当な理由があります。1 つの例: クラスには多くのインスタンス変数があり、そのほとんどはプリミティブ型 (integer、float) または保持サイクルを避けるために意図的に保持されていないオブジェクト (デリゲート) です。を使用した浅いコピーNSCopyObjectは、これらすべてを自己文書化された 1 行のコード行にコピーします。参照カウントが必要な残りの ivar は、個別に保持またはコピーできます。

これに代わる方法は、ポインター構文 ( newObject->ivar = ivar) を使用して新しいオブジェクトに割り当てるか、潜在的に多数の引数 (コピーする ivar ごとに 1 つ) を持つ init メソッドを作成することです。後者は特に醜いと思いますが、ヘッダーに含めて世界に公開する必要はないと思います。

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

iphone - NSMutableArrayアイテムをコピーします

私はこのような可変配列をコピーしています:

配列内のアイテムは、次のようにcopyWithZoneを実装します。

ただし、playerListには、「スコープ外」のオブジェクトしか含まれていないようです。私は何が間違っているのですか?

0 投票する
3 に答える
56556 参照

iphone - NSCopying の実装

ドキュメントを読みましたが、NSCopying必要なものを実装する方法についてはまだよくわかりません。

私のクラスVendor

このVendorクラスには、 と呼ばれるオブジェクトの配列がありますCar

私のCarオブジェクト:

したがって、オブジェクトVendorの配列を保持しCarます。Car他のカスタム オブジェクトの 2 つの配列を保持します。

Vendorとの両方Carが辞書から初期化されます。これらのメソッドの 1 つを追加します。関連する場合と関連しない場合があります。

怖い問題を要約すると。

オブジェクトの配列をコピーする必要がありVendorます。NSCopyingにプロトコルを実装する必要があると思います。これは、 の配列を保持しているためVendor、 にも実装する必要があることを意味する可能性があります。つまり、オブジェクトに属する 2 つの配列に保持されているクラスにも実装する必要があります。CarVendorCarCar

NSCopyingでプロトコルを実装するためのガイダンスを得ることができれば、本当に感謝してVendorいます。これに関するチュートリアルはどこにも見つかりません。

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

objective-c - オブジェクトを再帰的に作成し、そのオブジェクトの配列から特定のオブジェクトをコピーする

だから、私は自分のプログラミングプロジェクトに少し苦労しています。

プレイヤー情報、名前、勝敗を格納するオブジェクトがあります。

プレーヤー情報の値を設定する別のオブジェクト (ブラケット) でそのオブジェクトを使用し、各ループの後、プレーヤー オブジェクトをブラケット クラスの NSMutable にコピーします。

ブラケット クラス内には、情報を出力するメソッドがあり、簡単に理解できました。

ここで、次のブラケットで何が起こるかを生成するために、誰が勝ったか負けたかのコピーが終了したときにブラケットを返すメソッドをセットアップしました。

これをすべて同じブラケット メソッド内で行ったので、できるだけ簡単にデータにアクセスできました。単純にプレーヤー オブジェクトのコピーを作成し、それを新しいブラケットに追加するにはどうすればよいですか?

生成したブラケットを印刷しようとすると、ガベージ値が取得されるか、まったく取得されないことがわかりました。これが私が問題を抱えている私の機能です。

だから、私はそれがうまくいくと思った。それは問題なくコンパイルされます(いくつかの警告が表示されますが、主にロジックに使用する整数などに関するものです)。

ありがとう!

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

objective-c - サブクラスのサブクラスに NSCopying を実装する

実装copyWithZone:に問題がある小さなクラス階層があります。NSCopying のドキュメントを読みましたが、正しい答えが見つかりません。

ShapeSquareの 2 つのクラスを使用します。正方形は次のように定義されます。

そこに驚きはありません。各クラスには1 つのプロパティがあり、Shape には "sides" int があり、Square には "width" int があります。メソッドは以下のcopyWithZone:とおりです。

四角

ドキュメントを見ると、これが「正しい」方法のようです。

そうではない。

copyWithZone:メソッドによって返される Square の width プロパティを設定またはアクセスしようとすると、次のようなエラーで失敗します。

[super copyWithZone:zone];Square メソッドを呼び出すと、実際には Shape が返されます。そのメソッドで width プロパティを設定することさえ許可されているのは奇跡です。

そうは言っても、スーパークラスの変数をコピーする責任を負わせないように、サブクラスにNSCopying を実装するにはどうすればよいでしょうか?

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

iphone - iPhone : (id)copyWithZone:(NSZone *)zone : 「ゾーン」とは何ですか?

NSCopying のこのメソッドをクラスに実装してコピーを有効にする場合、ゾーン パラメータの使用は何ですか? 新しいオブジェクトを設定する場合、alloc で十分なので、allocWithZone で割り当てる必要はありません...混乱しています...

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

objective-c - あるNSMutableArrayから別のNSMutableArrayにオブジェクトをコピーします

あるNSMutableArrayから別のNSMutableArrayへのオブジェクトのコピーを理解しようとしています。次の2つのシナリオを検討してください。1-クローンへのオリジナルのコピー。クローンの変更がオリジナルに影響します。2-クローズでの変更がオリジナルに影響を与えない場合に、オリジナルをクローンにコピーします。

まず、次のコードを使用して、最初にシナリオ#1を作成しようとしています。私が理解していることから、「mutablecopy」を使用せずに配列をコピーする場合、クローン配列は元の同じ文字列オブジェクトへのポインタを保持するだけです。では、クローンの最初の要素を別のオブジェクトに変更すると、元の要素の最初の要素が正しく変更されますか?...しかし、それは私が得ている結果ではありません。なんで?

実際のところ、mutablecopyを使用する場合

同じ結果が得られます。私は混乱しています。

ArrayClass.h

ArrayClass.m

..。

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

objective-c - UIImageView サブクラスのコピー

配列にいくつかのオブジェクトがあります。これらのオブジェクトはUIImageViewサブクラスからのものです。

これらのオブジェクトのクラスには、いくつかの@synthesized プロパティがあります。

ある時点で、配列上の特定の位置に別の座標でオブジェクトの複製を作成する必要があります。それから私は:

このコードを実行しても、何も起こりません。つまり、10 ピクセルのオフセットでオブジェクトが作成されず、コンソールに次のメッセージが表示されます。

** ... copyWithZone:]: 認識されないセレクターがインスタンスに送信されました ... **

オブジェクトには、テキスト ボックス、ラベル、影や光彩などを持つ画像などのいくつかの要素があり、新しいオブジェクトは、テキストの色、影、光彩、サイズ、画像などについて、オブジェクトと同じ値を持つ必要があります。オリジナル。

プロトコルが整っていると思いUIImageViewました。NSCopyingこれが問題である場合、どうすれば実装できますか?

ドキュメントに私を送らないでください。私はそれらを読みました。これが私がここで質問している理由です。実践例を教えてください。

ありがとう。

0 投票する
3 に答える
504 参照

iphone - mutableCopy 使用時のデバイスでのメモリ リーク

行き止まりになったとき、私は自分のこの新しいアプリをリリースするのが本当に近いと思っていました。私のコードは、シミュレータ (Xcode 4.0.2) ではメモリ リークなしで動作しますが、デバイスでメモリ リークが報告されます。

私の問題は、オブジェクトをコピーすることに関連していると思います。これは、トラブルシューティングの試みでコピーなしで試したところ、メモリ リークがなくなったためです (もちろん、機能もそうです!)。

私がしていることは、UIView のサブクラスのインスタンスを配列に追加することです。このサブクラス (cityToAdd がインスタンスである都市) には、後の段階でアクセスする必要がある 2 つの UIView といくつかの変数があります。

これを行うと、デバイスでメモリ リークが発生します。

しかし、私がこれを行うと、私はしません (ただし、機能が失われます)

サブクラスでは、コピーを処理するためにこれを持っています:

}

Instruments から、デバイスでテストするときにこれを取得します。

ここに画像の説明を入力

2 行目をドリルダウンすると、次のように表示されます。 ここに画像の説明を入力

最後に私のinitWithCityNameメソッド(こんなに長い投稿でごめんなさい!!)Instrumentsから色とメッセージを取得するための画像としてそれを入れました...

ここに画像の説明を入力

最後に、UIIMage imageNamedUniversal は、iPad で @2x 画像を提供するための拡張機能です (ただし、通常の imageNamed で試したところ、同じメモリ リークが発生しました)。

どこから始めればいいのかわからない!! どんなアイデアでも大歓迎です。

ありがとう

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

objective-c - copyWithZoneでnilをチェックする必要がありますか?

Sketchの例では、次の値が返さ-[<NSCopying> copyWithZone:]れる場合、inはチェックされません。-[<NSObject> init]nil

これは、それが戻った場合nil(つまりバグ)、実行時にnull逆参照があることを意味します。

プログラムでリターンがあるかどうか-[<NSCopying> copyWithZone:]をチェックしないのは普通ですか?私もこれをすべきではありませんか?私はこれについて:-[<NSObject> init]nil