問題タブ [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.
objective-c - iOS はプールなしで自動リリースされました - しかし、私は ARP を作成しています!
そのため、[NSThread detachNewThreadSelector] を使用して新しいスレッドを生成すると、コンソールに「プールが配置されていない状態で自動解放されました」というエラーが表示されます。自動解放プールの作成に失敗すると、これが発生する可能性があることはわかっていますが、問題は、私が作成していることです。同じアプリの他の部分で同様のコードを使用していますが、これらのエラーは発生しません。
関連するコードは次のとおりです。
さて、(リモート サーバーからイメージをロードする) 実際に作業を行う loadImageFromURL にさらに多くのコードがありましたが、そのコードがなくても問題が明らかになるので、削除しました (私が持っていると思わないように)何もしない無意味なスレッド!)。問題を示すコードを 1 行だけ残しました。自動解放された NSNumber オブジェクトを作成します。
このコードを実行すると、コンソールに次のように報告されます。
__NSAutoreleaseNoPool(): Object 0x535c0e0 of class NSCFNumber autoreleased with no pool in place - just leaking
もちろん、実際のコードは他の多くの AR オブジェクトを作成し、それらすべても同様に報告されます。
役に立つかもしれないヒントや指針に感謝します!
ありがとう!
cocoa-touch - UIImage imageWithDataリーク(GCD)
こんにちは私は次のコードでInstrumentから報告されたリークを受け取っています。
Leaksは、私の画像= [UIImage imageWithData:imageData]がリークしていると報告していますが、その理由は何ですか?自動リリースされたUIImageオブジェクトのNSAutoreleasePoolが必要ですか?
ところで、それが問題なら、私は__block UIImage * image=nil;と宣言しました。上記のコードを入力する前に、ImageCacheで画像をチェックするためです。
macos - OSX 上の SDL + OpenGL: NSAutoreleaseNoPool()
私は OpenGL と SDL を使用していくつかのクロスプラットフォーム コードに取り組んでいますが、すぐに Mac OSX で問題が発生しました。
参考までに、GitHub のコードベースは次のとおりです: https://github.com/GrooveStomp/platformer
また、表示されているエラーを同じレポにプッシュしました: https://github.com/GrooveStomp/platformer/blob/master/errors.txt
今、私が行った読書から、SDL は単に Mac OSX の Objective-C Cocoa レイヤーをラップしているように見えます。プログラム全体をラップするには、独自の NSAutoreleasePool を宣言する必要があります。あれは正しいですか?
このリンクに出くわしました: http://sourceforge.net/apps/wordpress/paintown/2010/12/26/sdl-and-osx/著者がソースからインストールし、問題はありません。ビルド時に「-framework OpenGL」を指定する必要があるため、作者のステップ#3と同等であると想定するHomebrewを使用してインストールしました。
[編集]
したがって、NSAutoreleaseNoPool() の問題は、次の 3 つの手順に従って処理する必要があることがわかります。
- main() には次のシグネチャが必要です: int main(int argc, char * argv[])
- main() があるソース ファイルに #include <SDL.h> を追加します。
- -lSDLmain でリンク
その結果、SDL は独自の main() を NSAutoreleasePool でラップし、メイン全体をラップします。ただし、これを行うと、次のエラーが表示されます。
https://github.com/GrooveStomp/platformer/blob/master/make_errors.txt
iphone - 自動解放されたオブジェクトを作成していない場合、自動解放プールは必要ですか?
つまり、自動リリースされたオブジェクトを作成していないと絶対に確信している場合は、もちろん作成しません。私の本当の懸念は、私が理解していない内部に何か他のものがあるかどうかです。関数を呼び出すバックグラウンドスレッドがあります。とにかく、常に自動解放プールを作成する必要がありますか?
objective-c - nsautoreleasepoolスコープ内のreturnステートメント
以下のシナリオがあるとしましょう:
このようにプールブロック内から戻るのは正しいですか?
iphone - iOS detachNewThreadSelector のリーク
いくつかの画像を読み込んでいる UIScrollView があります。画像に効果を適用することがあり、プリロードを行うのに少し時間がかかることがあるので、detachNewThreadSelector を使用して別のスレッドでこれを行うことにしました。これにはgitHubにあるKTPhotoBrowserを使用しています。
基本的に、私はそのように機能しています。
私はこれを使用して呼び出します
これを実行すると、リークが発生しているように見えます。loadPhoto メソッドのコードの周りに AutoRelease プールを配置する必要があるかどうか疑問に思い始めています。このコードに興味がある場合は、以下に含めます。
どんなアイデアでも大歓迎です。
objective-c - NSBlockOperationおよびNSAutoreleasePool
通常、サブクラスを作成するときは、メソッドでのNSOperation
作成と解放を担当します。NSAutoreleasePool
-main
を使用する場合NSBlockOperation
、ブロックに自動解放プールを作成する必要がありますか?
iphone - NSAutoreleasepool: iPhone アプリのメモリ管理の問題
これは、コンソールで警告として表示されるものです。クラッシュは発生しませんが、メモリ管理の問題のようです。
何が間違っている可能性がありますか?
セグメント化されたコントロールを自動解放していません。
iphone - ゲームでの画面の読み込み(移行中にアニメーションが途切れないようにする)
私はcocos2dゲームを持っています。ゲームがロードされて実行されると、55〜60fpsで実行されます。
ただし、メニューとゲームの両方にスプライトシート(それぞれ1つ)を使用しているため、ゲームをロードするときにクロスオーバーのポイントがあり、メモリにロードされる大きなpngが多すぎるため、メモリ警告が発生します。
ロードのために移行する単純なCCSceneを実装しました(軽量で、メインのゲームシーンのロードに進む前にメニューのロックを解除できます)。
これは見事に機能します。しかし、私は小さな障害にぶつかりました。ロード画面で、ロードという単語の横に主人公が回転しています(何かが起こっていることを示すため)。
NSThreadを使用してゲームを別のスレッドにロードし、ロードシーンのアニメーションを妨げられることなく続行できることを発見しました(これにより、非常に快適なユーザーエクスペリエンスが実現しました)。
ただし、5〜6 / 10回、このエラーメッセージが表示されます。
このコードを使用してゲームをロードしています。
ボタン内-
新しいスレッドで実行されるメソッド-
何が起こっているのかを防ぐ方法についてのアイデアはありますか?
NSLockは、gameSceneがgamesheet.plist(スプライトシートと座標内の個々の画像のフレーム名)を読み込もうとしたときに発生します。
ios - NSAutoreleasePool。新しい自動解放プールを作成するのが適切なのはいつですか?
iOS/CocoaTouch では、メソッド内で NSAutoreleasePool の新しいインスタンスを作成するコードをよく見かけます。私は最近、NSOperation 内で 1 つを見ました。
NSAutoreleasePool の新しいインスタンスを設定するための基本ルールは何ですか? main.m で作成された既存のリリース プールに単純に依存するよりも、なぜこれが望ましいのでしょうか?
ありがとう、
ダグ