問題タブ [nsautoreleasepool]

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 に答える
1000 参照

xcode4 - プールが配置されていない自動解放

iPhone アプリを Xcode 4 シミュレーターで実行すると、次の出力が表示されます。これを引き起こしている手順を知るにはどうすればよいですか?

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

objective-c - ビューにNSAutoreleasePoolを使用できますか?

ビューを介して使用する方法があるかどうかを知りたいです(ファイルでNSAutoreleasePool何かを定義し、.mファイルのdeallocメソッドでそれらを定義するのと同じように)。 出来ますか?.hdealloc

0 投票する
0 に答える
358 参照

objective-c - NSAutoreleasePool ドレイン リリース +1 送信された autorelease メッセージの数よりも多い

再現可能な方法でクラッシュする iPhone アプリをデバッグする際に問題が発生しました。

短編小説: カスタムUIViewControllerが割り当てられ、UINavigationControllerのスタックにプッシュされます。しばらくUIViewControllerして、 がスタックからポップされます。をスタックにプッシュするとUIViewController、アプリがクラッシュします。

クラッシュの標準的な手順は、Instruments をNSZombie有効にして使用することです。オブジェクトの履歴を調べると、私が理解できないことが明らかになりました:

  • オブジェクトは 2 つのautoreleaseメッセージを受け取り、
  • NSAutoreleasePoolドレイン メソッドは、3 つのリリース メッセージを送信します。

これまでのところ、クラッシュを防ぐ唯一の方法は、問題のオブジェクトにリリース メッセージを 1 つも送信しないことです。これにより、メモリ リークの赤いフラグが立てられます。

私が見落とした他の解決策はありますか?

更新:あなたの一人が明白に指摘したように:

コードに問題があります。自動解放プールのドレインとは関係ありません。

UIViewController最初のものがデリゲートとして渡されたことが判明したため、呼び出しがナビゲーションコントローラー自体から来UINavigationControllerたときに混乱しました。Zombie

間違った質問をする前に、次回はもっと注意する必要があります。

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

iphone - スレッドと autoreleasepool に関する質問

私が理解しているように、スレッドで実行されるタスクを送信するにはいくつかの方法があります。私が使用する最も一般的なものは次のとおりです。

1) performSelector:withObject:afterDelay:

2) performSelectorOnMainThread:withObject:waitUntilDone:

3) performSelectorInBackground:withObject:

4) [NSThread detachNewThreadSelector:toTarget:withObject:]

私の最初の質問は、明らかなパラメーターの違い以外に、1) と 2) の違いは何ですか? どちらも実際にメイン スレッドで動作していますか (その自動解放プールは main.m で自動的に作成されました)。Stackoverflow に関する誰かの投稿から、メソッド 1) が実際に新しいスレッドで動作していることを読んだところです。そのため、そのセレクター メソッド用に自動解放プールを作成する必要があります。これは正しいです?私は主に遅延パラメーターを利用するために 1) を多く使用してきましたが、それらの自動解放プールを作成したことはありません。壊滅的なことは何も起こっていません。

次に、3) と 4) はどちらも別のスレッドでタスクを実行します。これらのスレッドで UI の処理を​​行うべきではないと聞きましたが、厳密に UI とは何かについて混乱しています。テーブルビューがナビゲーションコントローラーからモーダルに起動している間に、基本的に繰り返し読み込みアニメーションを再生するコードを作成しようとしていました。アニメーションは、tableview コントローラーの viewDidLoad メソッドで停止されます。最初は、モーダル ビューを開始するコード行の上に、アニメーションを開始するコードを貼り付けました。何が起こったかというと、アニメーションはまったく再生されませんでした。

次に、次のことを試しましたが、うまくいきました...

アニメーションは、SettingsViewController ビューが完全に起動されるまで再生を続けます。しかし、このようなモーダル ビューの起動は「UI」としてカウントされ、避けるべきでしょうか? また、モーダル ビューが起動されるたびに、Instruments で奇妙なメモリ リーク エラーが発生します。しかし、それはデバッグが非常に難しいと言われている「システム ライブラリ」の 1 つからのものです。ここで何がうまくいかないのでしょうか?

恥ずかしいほどの長文で申し訳ありません。どんな助けでも大歓迎です!

0 投票する
4 に答える
2836 参照

objective-c - オブジェクトが NSAutoreleasePool にあるかどうかを確認する方法

オブジェクトが自動解放された回数を知りたいです。オブジェクトが自動解放されたかどうかを知るのは一般的に簡単なほど十分長い間客観的 c を使用してきましたが、メモリと保持カウントを扱う質問を常に目にします。ある時点で、答えは常に「オブジェクトのretainCountを信頼することはできません」で終わります-これには同意しますが、オブジェクトが自動解放された回数を判断できれば、追加した場合、retainCountを実際に信頼できます次のようなカテゴリ:

通常、コピー中に保持カウントが増加するため、不変型の例外は依然としてあります。

私が提案していないこと

プロダクションコードでretainCountを使用するためにこの答えを求めているわけではありません。ただし、これはメモリの問題をデバッグする人にとっては価値があると思います。

プログラマーはオブジェクトが自動解放された回数を気にするべきではないので、この質問を嫌う人もいると思います。コーディングは、割り当て、保持、コピー、リリースに伴う新規作成、ストーリーの終わりのバランスをとることがすべてであるべきです。ただし、これのポイントは、人々が頭を叩くのを助けることです。 [NSObject retainCount]多くの人を燃やします、そしてこの質問への答えはかなりクールです.

オブジェクトが自動解放された回数を判断する方法があると確信しています。私はそれが何であるかわからないので、質問です。

同様の質問を参照してください: Objective-c の NSAutoreleasePool 内のオブジェクト

編集


皆様、ご回答ありがとうございます。これは面白いと思うかもしれません => Ariel は、GNUStep の Cocoa の実装、具体的には NSAutoReleasePool に+(NSUInteger)autoreleaseCountForObject:(id)anObject というメソッドがあることを指摘しました。このメソッドは遅く、呼び出し元のスレッドの NSAutoReleasePools からの自動解放カウントのみを返します。それでも...そこにあるのは興味深いです。ドキュメントは、実際にはデバッグにのみ役立つと述べています。これは、私が Cocoa フレームワークで何らかの方法で見つけたい (または可能性を見つけたい) ことです。

自動解放カウントを取得できたとしても、より優れたツール (ゾンビ、リーク、静的アナライザー) が存在するという回答に同意します。

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

objective-c - UIViewControllerライフサイクルのNSAutoreleasePool

私はiPad用のアプリで働いています。いくつかのビューが表示されるので、メモリ管理に注意する必要があります。

私の問題は自動解放オブジェクトに関連しています。NSAutoreleasePoolを各ViewControllerに関連付けたいと思います。このようなもの:

MyViewController.h

MyViewController.m

NSAutoreleasePoolをプロパティとして使用することはできません。このような振る舞いを実現したいと思います。何か案が?前もって感謝します。

編集

ご回答ありがとうございます。あなたの質問に答えて(私はまだ私の質問に答えることができません):

viewControllerは、さらに多くのことを実行し、イベントなどに応答します。私が望むのは、これらすべての操作の後で、自動解放されるべきものを解放することです。例を拡張する:

MyViewController.h

MyViewController.m

ここで、文字列と画像はどうなりますか?プールに残っていると思いますよね?mainメソッドでリリースプールを待つこともできますが、アプリケーションが終了すると解放されると思います。

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

ruby - Ruby app throwing "attempt to pop an unknown release pool"? (OpenGL, OS X)

In my small Ruby project using OpenGL via Gosu and Chingu I'm now seeing a number of these errors pop up during my tests:

2011-09-30 23:31:01.789 ruby[832:903] * attempt to pop an unknown autorelease pool (0x12c55a00)

UPDATE: I'm now also seeing some of these forms, definitely indicating a leak:

2011-10-01 03:50:00.281 ruby[3212:903] * __NSAutoreleaseNoPool(): Object 0x461aa0 of class NSCFNumber autoreleased with no pool in place - just leaking

2011-10-01 03:50:00.282 ruby[3212:903] * __NSAutoreleaseNoPool(): Object 0x461ae0 of class NSConcreteValue autoreleased with no pool in place - just leaking

2011-10-01 03:50:00.283 ruby[3212:903] * __NSAutoreleaseNoPool(): Object 0x10ce230 of class NSCFNumber autoreleased with no pool in place - just leaking

2011-10-01 03:50:00.285 ruby[3212:903] * __NSAutoreleaseNoPool(): Object 0x42abb0 of class NSConcreteValue autoreleased with no pool in place - just leaking

2011-10-01 03:50:00.286 ruby[3212:903] * __NSAutoreleaseNoPool(): Object 0xa031570 of class NSCFDictionary autoreleased with no pool in place - just leaking

Any thoughts on what likely causes might be for this? It's somewhat enigmatic message to me -- or at least it doesn't provide enough context for me to immediately diagnose. It doesn't seem to cause any of the tests to fail or anything, but I'm certain I am leaking memory -- probably from not closing a resource down properly, I would guess, but I'm not really sure how to go about tracking this down. Can ruby-debug help me figure out what's going on here? What should my next steps in the investigation here be?

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

objective-c - Objective-C :: NSMutableRequest に NSAutoreleasePool を使用する方法 - 非同期リクエスト?

ビュー コントローラーでは、多くの NSMutableRequest 呼び出しを非同期的に実行しています。コールバック メソッドでは、応答を処理しています。これらのすべてのリクエストは自動リリースされます。ここでは、NSAutoReleasePool を使用してこれらの自動解放されたオブジェクトを解放する方法を知りたいと思います。これについて明確にしていただけますか?

前もって感謝します。

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

objective-c - NSAutoreleasePoolがないためにリークしているスレッドを見つけるにはどうすればよいですか?

アプリを実行すると、次のメッセージが表示されます。

これが発生しているスレッドの開始時にNSAutoreleasePoolを作成する必要があることは理解していますが、コードのどこでこれが発生しているかわかりません。問題のオブジェクトが自動解放されたときにヒットするブレークポイントを設定することは可能ですか?

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

ios - メモリー使用量をトレーニングするアプリを作りたい(iOS)

iOSプログラミングとメモリ管理全般に比較的慣れていないスタッフがたくさんいます。保持カウントを示すいくつかのラベルと、それらの保持カウントをインクリメントおよびデクリメントするためのいくつかのボタンを備えたアプリを作成したいと思います。

誰かがすでにうまくいく何かを知っているか、それが私の主張を理解するようにこれを設定することについて何かアドバイスがありますか?動作するバージョンがありますが、思ったとおりに動作していないようです。

これを実行すると問題ないように見えますが、保持ボタンを押そうとするとクラッシュします。誰かがこれを少しきれいにする方法について何かアドバイスがあれば、私はそれをいただければ幸いです。理想的には、保持カウントがゼロに達してアプリがクラッシュしたときにアクセスボタンを押してもらいたいのですが、保持カウントが1以上であれば、アクセスボタンは機能するはずです。ありがとう。