問題タブ [retaincount]
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.
iphone - (非アトミック、保持)合成プロパティのリリース
私の質問は、プロパティのリリースに関する12の質問のように見えますが、探している正確な答えが見つかりません。
プロパティがretainで宣言されている場合:
それから
保持および解放操作でゲッターとセッターを生成します。わかった。
もちろん、プロパティはdeallocでリリースする必要があります。
だからそれはきれいです。
しかし、myStringを使用したことがない場合はどうなりますか?事前に初期化されていますか?私の意見では、myStringのretain-countは0になります。しかし、deallocでmyStringをリリースすると、myStringが減少し、アプリケーションがクラッシュしますか?しかし、それはクラッシュしません!
それを解放するためのよりクリーンな方法は次のようですか?
objective-c - 自動参照カウント(ARC)とretainCount
プロジェクトをARCを使用するように変換している最中で、特別な問題が発生しました。ネットワークからダウンロードされたファイルのキャッシュを管理するクラスがあります。各ファイルはiPhoneファイルシステムに保存され、関連するオブジェクトはそのマネージャークラスに保持されます。ファイルを使用したい他のオブジェクトは、私のマネージャーにキャッシュオブジェクトを要求し、ファイルが必要な限りそれを保持します。
しかし、時々、マネージャーはキャッシュをクリーンアップし、古いファイルを削除します。もちろん、その時点で使用中のファイルを削除するべきではありません。ARCの前は、関連するオブジェクトのretainCountを使用して次のことを検出しました。
これは完全に機能しました[はい、retainCountの信頼性の欠如に関する警告については知っていますが、私の経験では、retainCount> 1の場合、複数のオブジェクトがそれを保持していることを確認できます]
ただし、ARCでは、retainCountを使用できなくなりました。独自の保持カウントメカニズムを導入し、ファイルを使用するすべてのオブジェクトにファイルオブジェクトを明示的に保持および解放するように要求することができます。しかし、それはエラーが発生しやすく、まさにARCが解決することになっている種類のことです。
同じことを達成するためのより良い方法を知っていますか?
objective-c - UIViewController pushViewController の View Controller の保持回数が多い
次のコードを書きました。
2 つのログの結果は、順番に1と6です。これはどのように可能ですか?alloc メソッドを 1 回だけ呼び出し、コントローラーをスタックにプッシュした後に解放します。alloc-> +1、push-> +1、release-> -1 = 1 かどうか?
スタックからポップするときに、View Controller の割り当てを解除したいのですが..
objective-c - 目的 c の可変オブジェクトと不変オブジェクトのカウントを保持しますか?
出力 :dic1:2 dic2:4 dic3:1 dic4:3
変更可能なオブジェクトの保持カウントと不変オブジェクトの保持カウントの違いは何ですか?plsは私に解決策を与えます...
objective-c - RetainCount このインスタンスで使用してもよろしいですか?
RetainCount == 悪い
retainCount
はタブーであり、信頼性が低く、予測不可能であり、一般的に使用すべきではありません。コードのどこにも使用していませんが、興味深い方法で使用している 1 つのクラスで見ました。
スレッドがキャンセルされるまで無期限に実行されるスレッドを実行するクラスがあります。問題は、スレッドが所有者の保持カウントを増やすことです。私の場合は、それをインスタンス化したクラスです。そのため、そのクラスを使い終わったとしても、クラスを管理している誰かがスレッドをシャットダウンすることを知っていない限り、そのインスタンスはまだぶらぶらしています。これは 1 つの解決策ですが、これがコードで見つけたものです。
これは賢い解決策ですが、どう考えればよいかわかりません。クラスの release をオーバーライドし、retain カウントが 2 かどうかを確認します。つまり、オブジェクトを存続させているのはスレッドだけかどうかを確認します(retain カウントが 2 から 1 に減らされようとしているため)。 ) スレッドを終了します (quitDispatchThread
スレッドが終了するまでブロックします)。
そう...
1 かどうかを確認するために、retainCount を信頼できますか?
retainCount
そこにいくつかの自動リリースがあるかどうかわからないので、通常、人々は近づかないようにと言います。ただし、retainCount が 1 の場合、スレッドだけがそれを維持しているという事実がわかり、自動解放などが原因でretainCount がオフになる可能性があることを心配する必要はありません...
このコードの何が問題になっていますか?
削除しようとしましたが、実際には理にかなっているようです。他のオブジェクトは、私のクラスがスレッドを実行していることを認識する必要はありません。他のオブジェクトretain
や、スレッドを所有しているオブジェクトrelease
でさえもautorelease
、スレッドをシャットダウンすることを心配する必要はありません。
このコードは実際にはすっきりしていて、私は驚いています。
編集 :: NSThread がオブジェクトを保持している
NSThread を使用しているため、オブジェクトの保持カウントが増加しています。私のオブジェクトは でtarget
、selector
はスレッドが実行されるメソッドです。
initWithTarget:セレクター:オブジェクト:
指定された引数で初期化された NSThread オブジェクトを返します。
- (id)initWithTarget:(id)ターゲットセレクター:(SEL)セレクターオブジェクト:(id)引数
パラメーター
目標
selector で指定されたメッセージの送信先オブジェクト。
セレクタ
ターゲットに送信するメッセージのセレクター。このセレクターは引数を 1 つだけ受け取る必要があり、戻り値を持たない必要があります。
口論
ターゲットに渡される単一の引数。ゼロかもしれません。
戻り値
指定された引数で初期化された NSThread オブジェクト。
討論
ガベージ コレクションされていないアプリケーションの場合、メソッド セレクターは、新しく切り離されたスレッドの自動解放プールを設定し、終了する前にそのプールを解放する役割を果たします。ガベージ コレクションされたアプリケーションは、自動解放プールを作成する必要はありません。
オブジェクトのターゲットと引数は、切り離されたスレッドの実行中に保持されます。それらは、スレッドが最終的に終了するときに解放されます。
objective-c - 追跡オブジェクトは呼び出しを保持します
オブジェクトを保持しているものを追跡するにはどうすればよいですか?delloc
リストから削除したときに期待どおりに動作しないオブジェクトがあります。何かが保持カウントを増やしているのではないかと疑っています。そのため、オブジェクトの保持カウントが増えたときにコードに侵入する場所を理想的に作成する方法を知りたいと思います。
objective-c - 保持カウントを増加させるのは、alloc と init のどちらですか?
オブジェクトを作成して所有権を取得する必要がある場合は、次のように記述します
その後、someObject
の保持カウントは 1 に等しくなります。どのメソッドがカウントを増やしますか、alloc
またはinit
で、Apple のドキュメントのどこでこの動作が説明されていますか?
objective-c - 管理対象オブジェクトの参照数
クラスA
(NSManagedObjectのサブクラス)のプロパティを持つクラス(NSManagedObjectのサブクラスB
)がありますが、プロパティはそうではあり@synthesize
ません。モデルとの間に@dynamic
関係はありません。 ) 生きている。( dbから
最初にオブジェクトをフェッチしたとき、彼のプロパティはnullです) A
B
A
B
A
A
B
プロパティゲッターをオーバーライドするので、最初に呼び出されたときに、dbからオブジェクト B
をフェッチします。B
ここで、のフェッチ結果を保持する必要がありB
ますか?
NSManagedObjectContextが管理するオブジェクトを保持するのは良い考えではないと聞いたと思います。
iphone - 保持カウントが+1のリークされたオブジェクトを修正するにはどうすればよいですか?
次のコードでリークされたオブジェクトがあります。どうすれば修正できますか?[apiViewControllerリリース]を追加してみました。しかし、私がアプリを分析すると、私はまだ:を取得します
助けてくれてありがとう
iphone - Objectivec-参照カウント
5分までは、Objective cの参照カウントについての理解が優れていると確信していましたが、オブジェクトのretainCountをチェックし始めたとき、私が見たものを見て非常に驚きました。
たとえば、myViewControllerにはUITableviewがあります。
.hファイル
.mファイル
驚いたことに、入力は次のとおりです。
明らかにステップ1は保持カウントを1増やしますalloc
また、STEPTHREEで保持カウントが1増加することも知っています。addSubview
しかし、ステップ2で何が起こっているのでしょうか?なぜそれは保持数を増やしたのですか?
ARCとは何か関係がありますか?