問題タブ [nsmutablecopying]
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.
objective-c - これは NSMutableCopying を実装するための合理的なパターンですか?
不変のオブジェクトのセットがあるため、インターフェイスを実装しようとしていNSMutableCopying
ますが、変更されたコピーを作成できる必要もあります。次のように定義されたムービーがあるとします (もちろん、実際にはもっと多くのプロパティがあります)。
私が読んだことから、ここで実装するように、コンストラクターの外部で ivar を設定する必要がある場合は、NSCopying
プライベート セッターを定義することをお勧めします。したがって、次のような実装になりますBBMovie
(これらの型はサブクラス化を許可するように設計されていないことに注意してください):
さて、実装にはプロパティのゲッターとセッターの両方があることがわかっているので、次のように簡単BBMovie
に実装できるはずです。BBMutableMovie
このアプローチに問題はありますか、または何か不足していますか?
もちろん、BBMovie の実装は、ライブラリのコンシューマによって送信された場合に設定されたメッセージに応答するため、真に不変ではないことは理解していますが、セキュリティ リスクを示さず、ライブラリの「通常」の使用範囲外。
objective-c - リテラル構文とmutableCopyおよびObjective-Cコンパイラの警告
私はPythonの経験が何よりも多いので、可変配列と不変配列およびdictを操作するのは少し奇妙です。Xcode 4.5が追加したリテラル構文を本当に楽しんでいますが、簡単な混乱を行うと、次のような状況に遭遇します。
コンパイラは、「myArrayがaddObjectに応答しない可能性があります」という警告を表示します。
コードはコンパイルされ、addObjectは正常に機能します。オブジェクトをNSLogして、myArrayに存在することを確認できますが、この警告の性質を完全には理解していません。この状況では、mutableCopyはNSMutableArrayを返しませんか?単にNSMutableArrayを使用し、リテラル構文を(過剰に)使用しようとしない方が適切ですか?
また、これはばかげた警告なので、無視して続行できますか?それは...最悪の場合は怠惰であり、将来的にはシェナニガンへの扉を開くだけかもしれません。
iphone - MutableCopy AllocLeak メモリリーク
1 秒に 1 回起動する NSTimer があります。
そして毎秒、変更が必要な NSString があります。
私はこれまでメモリ管理を試みたことがないので、私がしていることが正しいかどうかはわかりませんが、楽器は「alloc」の下でstringByReplacingOccurrencesOfString
、約1分後にコード行に45MBの「Live Bytes」があると言っています...
(そして、ライブバイト数は毎秒増加し続け、最終的にアプリをクラッシュさせます)。
私の問題はMutableCopy
コードのどこかにあると思いますか?
これが私のコードです:
objective-c - カスタムクラスで-mutableCopyWithZone:を使用すると、不変になります
NSCopying
とに準拠するカスタムクラスを作成しましたNSMutableCopying
。
との実装を追加しましたが、オブジェクトを呼び出して別のメソッドを呼び出そうとすると、ivarを呼び出しても、一部のivarが不変になっているため、クラッシュし-copyWithZone:
ます。-mutableCopyWithZone:
-mutableCopy
-mutableCopyWithZone:
クラスをコピーする方法は次のとおりです。
(コードは、ivarで+flip:
使用しようとするため、removeObjectAtIndex:
失敗します)addObject:
NSMutableArray
クラスをコピーする方法は次のとおりです。
なぜ失敗するのかはわかりませんが、なぜそれが作成されず、変更可能でないのかは本当にわかりませarray
んobjects
。
助けていただければ幸いです。
objective-c - mutableCopyWithZone 紛らわしい要件?
明確化: 問題は、変更可能か不変かについてではなく、正しいクラスのインスタンスを作成するスーパーへの呼び出しについてです。[[self class] alloc]
基本クラスで使用することは考えていませんでしたが、これで問題が解決するようです。何も良いことがない場合は、次の数時間でその anser を受け入れます :)
それは非常に紛らわしいです。検討
仕様に従った場合、このコードがどのように正しい可能性があるのか わかりません。
への呼び出しが[super mutableCopyWithZone: zone]
返されたとき、基本クラスは独自の ivar に十分なスペースしか割り当てていないと予想しています。Derived
インスタンスが独自の ivar 用により多くのスペースを必要としていると判断する方法はありません。
ドキュメントが意味することは、実際には何ですか? これをどのように実装すればよいですか?
ios - mutableCopyWithZone と copyWithZone を適切に実装する方法
私はそれについて他のいくつかのトピックを読みましたが、それでも私は迷っています.
「読み取り専用」プロパティのみを持つ不変オブジェクトと、「読み取り書き込み」プロパティのみを持つ可変オブジェクトの 2 種類のオブジェクトを作成したいと考えています。
それらを EXCar と EXMutableCar と呼びましょう。
EXCar は NSObject のサブクラスで、EXMutableCar は EXCar のサブクラスです。
ExCar はそのインターフェースに
EXMutableCar はそのインターフェースに
そのため、サブクラスの EXMutableCar を使用するときに、EXCar のプロパティを「開きます」。そして、それは可変です。問題は、それらの間で適切にコピーすることです。
EXCar に mutableCopyWithZone を実装しました:
最初の質問、それは良い方法ですか?(ツバメコピーが欲しい)
問題は copyWithZone にあります。EXCar のプロパティは読み取り専用であるため、EXCar でも EXMutableCar でも EXCar の新しいインスタンスを作成して、そのプロパティを次のように入力することはできません。
そして、15 個のプロパティを渡す "init" メソッドを実際に実行したくはありません (確かに、EXCar は一例です。実際のクラスは多くのプロパティでいっぱいです)。また、通常はサーバーからの JSON メッセージから開始されるため、複雑な init メソッドは必要ありません。
2番目の質問はそうです、私のクラスを不変に保つ copyWithZone を行う方法は?
ご協力いただきありがとうございます :)
ios - なぜこの NSMutableAttributedString addAttribute は、mutableCopy を使用する場合にのみ機能するのですか?
私は次のコードを持っています:
ご覧のとおり、そのSon
部分を太字にしたいと思います。上記のステートメントを実行してもこれは機能しませんが、実行した場合にのみ機能します。
その理由は何でしょうか?
ios - Objective C の Mutable Copy は何をしますか
Objective C では、C++ 言語と同じように、オブジェクトをオブジェクトに代入すると、次のようなポインティング アドレスが取得されます。
したがって、上記のオブジェクトの 1 つを変更すると、他のオブジェクトに影響します。
これは MutableCopy でも同じですか? copy と MutableCopy の違いは何ですか?
ディープコピーを行うには?