問題タブ [autorelease]
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 - コンビニエンス コンストラクターまたはオブジェクト ファクトリがオブジェクトの解放を気にする必要があるのはなぜですか?
実際、名前に「new」、「create」、「alloc」、または「copy」を含むメソッドを使用する場合、返されたオブジェクトを解放する責任があります。BUT: なぜこれらのメソッドは -autorelease を呼び出すのでしょうか? これにより、オブジェクトが「過剰に解放」されることはありませんか?
そのようなメソッドからそのオブジェクトを取得し、それに対して -release を呼び出すとしましょう。オブジェクトは自動解放プールにあり、参照カウントは 0 です。次に、自動解放プールが解放されるとどうなりますか?
iphone - performSelectorInBackground: を実行すると自動解放プールがないのはなぜですか?
バックグラウンド スレッドに入るメソッドを呼び出しています。
次に、セレクターによって呼び出されるこのメソッドの実装があります。
そのスレッド用にそこに自動解放プールを作成しますが、常に次のエラーが発生します。
自動解放プールを削除すると、このようなメッセージが大量に表示されます。また、performSelectorInBackground: の呼び出しの周りに自動解放プールを作成しようとしましたが、それは役に立ちません。
パラメーターが疑わしいのですが、コンパイラーが NSCFNumber について文句を言う理由がわかりません。何か不足していますか?
私のインスタンス変数はすべて「非アトミック」です。それは問題になる可能性がありますか?
更新: メイン スレッドの自動解放プール (おそらく ivar) にいくつかの変数が追加されているのではないかと疑うかもしれませんが、間違った自動解放プール内でその変数を解放しようとしていますか? もしそうなら、どうすればそれを修正できますか?(くそー、このスレッド化は複雑です;))
iphone - mallocの「ダブルフリー」エラーの原因を見つける方法は?
Objective-Cでアプリケーションをプログラミングしていますが、次のエラーが発生します。
MyApp(2121,0xb0185000)malloc:***オブジェクト0x1068310のエラー:ダブルフリー
***デバッグするmalloc_error_breakにブレークポイントを設定します
NSAutoreleasePoolをリリースしたときに発生し、2回リリースしているオブジェクトがわかりません。
彼のブレークポイントを設定するにはどうすればよいですか?
この「オブジェクト0x1068310」が何であるかを知る方法はありますか?
iphone - メソッドをまたがる NSAutoreleasePool ?
UIがハングしないように、バックグラウンドで長時間実行される作業を行うためにいくつかのスレッドを切り離すiPhoneアプリケーションを構築しています。スレッドには、メモリ管理のために NSAutoreleasePool インスタンスが必要であることを理解しています。よくわからないのは、スレッド化されたメソッドが別のメソッドを呼び出すかどうかです-そのメソッドにも NSAutoreleasePool が必要ですか?
コード例:
私が尋ねる理由は、オブジェクトがプールを配置せずに自動解放され、「ちょうどリークしている」というエラーを受け取っているからです。
自動解放プールがまったく設置されていないという他の質問を見たことがありますが、なぜ自動解放プールが必要なのかを理解しています。threadedMethod
で作成された自動解放プール (この例では)が で作成されたオブジェクトに適用されるかどうかを調べることに特に関心がありますanotherMethod
。
objective-c - この状況でメモリ管理を処理するにはどうすればよいですか?
db接続を処理するクラスとエンティティクラスの2つのクラスがあります。dbクラスには、GetEntityByID:(int)entity_idというインスタンスメソッドがあります。このメソッドは単純なselectステートメントを実行し、initメソッドを使用してEntityクラスインスタンスを作成します。
これは正常に機能しますが、GetEntityByIDを呼び出す人は、それを解放することを忘れないでください。GetEntityByIDは「init」メソッドではないため、これは正しくないようです。この状況でメモリ管理を最適に処理するにはどうすればよいですか?
iphone - コレクションにオブジェクトを追加する前に自動リリースを使用しますか?
StackOverflowで尋ねられた質問を調べてきましたが、Objective-Cのメモリ管理については非常に多く、探していた答えを見つけることができませんでした。
問題は、新しく作成されたオブジェクト(NSMutableArrayなど)をコレクションに追加する前にautoreleaseを呼び出しても問題ない(そして推奨される)かどうかです。または、追加後に明示的にリリースする必要があります。(私はNSMutableArrayがオブジェクトを保持することを知っています)
これは私の質問を示しています:
シナリオA(自動リリース):
シナリオB(明示的なリリース):
私は両方とも正しいと思いますが、私にはわかりません。そして、私は確かに好ましい方法が何であるかを知りません。
Objective-Cの達人はこれに光を当てることができますか?
iphone - セカンダリNSThread実行ループで自動解放プールはどこに必要ですか?
私のアプリケーションのセカンダリスレッドの実行ループは以下のとおりです。ネストされた制御ループがあります。
- 外側のループは、アプリケーションの実行中実行されます
- 1つのビューが開いている間、内側のループが実行され、ビューが開いていない間、スレッドは待機します。
- 内側のループを通過する時間は短く、ほんの一瞬です。
私のコードは、自動リリースされたオブジェクトをリリースされていないプールに故意に残しませんが、OSが何をしているのかわかりません。
メインスレッドでは、cocoaは実行ループを通過するたびに自動解放プールをラップします。
この二次スレッドでは、最も近いものは内側のループを通過することだと思います。
内部自動解放プールは、内部ループを通過する各パスをラップします。
中央のプールは内部ループをラップアラウンドするため、このレベルで作成および自動解放されたオブジェクトは、アプリケーションが終了するまで保持されません。
外側のプールはランループ全体をラップします。
これらすべてのプールの作成と解放がコードの速度にどのような影響を与えているかをどのように判断できますか。
3つのプールすべてが必要か、過剰かを判断するにはどうすればよいですか?
コードと説明:
の組み合わせ:
- 内側のwhileループ
- NSCondition * processCondition
processGo
との間YES
で切り替えるNO
スレッドをキャンセルせずに、内側のwhileループを停止および開始できます。
実行は内部のwhileループに入ります。
メインスレッドが設定されたとき
実行は内側のwhileループを離れ
、外側のループの次のパスで整理され、実行がヒットします
待って
メインスレッドがリセットされた場合
と呼び出し
実行は内部ループに再び入ります
iphone - マルチスレッドiPhoneアプリが[NSAutoreleasePoolリリース]でクラッシュする
マルチスレッドのiPhoneアプリケーションでメモリ管理に関連する質問があります。main-UIスレッドとは別のスレッドで呼び出されるこのメソッドがあるとしましょう。
ご覧のとおりNSData
、ネットワーク運用から戻ってきたものを保持しています。問題は、メソッドの最後にリリース(または自動リリース)しないのはなぜですか?私がそれを機能させる唯一の方法はretain
、最初は使用することであり、その後は何も使用しません。他の組み合わせを使用すると(何もしない; retain
thenrelease
または)、スレッドを解放するautorelease
とプログラムがクラッシュします。私は何が欠けていますか?EXC_BAD_ACCESS
NSAutoreleasePool
参考までに、スレッドのメインコードは次のとおりです。
ご協力いただきありがとうございます!
iphone - iPhone 開発 - 自動解放されたオブジェクトを解放する
自動解放されたオブジェクトを解放するとどうなりますか? 解放したい自動解放された UIButton であり、UIButton を作成する唯一の方法は、便利なメソッド buttonWithType: を使用することです。通常のオブジェクトのようにメモリから解放されますか? それとも、autoreleasepool に任せるべきですか? できれば、そもそも自動リリースにしなかったでしょう。
ありがとう!!
objective-c - 配列と参照ポインターから削除した後の解放
そのため、特定の状況下でのオブジェクトの削除に関連するリークがある場所もあります。
前提: - Tree オブジェクトの NSMutableArray があります (Tree オブジェクトは自分自身を描画する方法を知っています)。- 基本的に最後に触れたツリーを指す参照ポインター (Tree *selected) があります。- *selected ポインターは弱参照であることに注意してください。
わかりました、これまでのところとても良いです。
問題: ツリーを削除するとリークが発生します。リストから、削除されるツリーが配列から削除する前にすべてを内部的に解放していることを確認します(配列から削除すると、自動的にリリースが呼び出されます)。
私が試したこと: Tree *selected ポインターが self プロパティを介してタッチされたツリーに割り当てられていることに気付きました:
self.selected = ツリー;
...そして、これを行うことで、それが保持されていることがわかります。だから私がやろうとしたのは電話でした:
[自己選択リリース];
ツリーが配列から削除された直後にこれを呼び出しました。...しかし、その時点でクラッシュし、本質的には既にリリースされていることを示しています。
質問: このエラー メッセージが表示されるのはなぜですか? 配列から削除しましたが、self.selected ポインターにはまだカウントが保持されているため、解放するべきではありませんか?
おそらく、削除プロセスの後に nil に設定する必要がありますか? または、おそらく、削除プロセスの前に自動リリースに設定する必要がありますか?