問題タブ [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 投票する
4 に答える
3052 参照

c++ - Objective-CなしでApple自動リリースプールを使用する

Linux、Windows、Mac OS Xで動作する必要のあるアプリケーションを開発しています。そのために、QtでC++を使用しています。

CFBundleCopyBundleURL多くの理由で、Mac OS Xでは、でリリースする必要のあるコアオブジェクトを作成するCoreFoundation関数(など)を使用する必要がありCFReleaseます。しかし、そうすることで、これらの警告がたくさん生成されます。

これらの自動解放プールに関して私が見たすべてのコードは、Objective-Cで書かれています。CまたはC++で自動解放プールを作成/使用する方法を知っている人はいますか?

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

iphone - 解放されるポインターが割り当てられませんでした。複雑な malloc 履歴のヘルプ

ここにリンクされている便利なガイドに従っています:

iPhone - 「解放中のポインタが割り当てられていません」というエラーのデバッグ

しかし、malloc_history は本当に私をループに陥れています。

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

iphone - バックグラウンドで NSDictionary をロードするための切り離された NSThread でのメモリ割り当て?

バックグラウンド スレッドを起動して、Web サービスから XML データを取得しようとしています。スレッドなしで同期的に開発したので、その部分が機能することはわかっています。これで、スレッドを生成して応答と解析を待機することにより、ノンブロッキング サービスを利用する準備が整いました。

スレッド内に NSAutoreleasePool を作成し、解析の最後に解放しました。スポーンするコードとスレッドは次のとおりです。

メインループ コードからスポーンします

スレッド (「自己」内) :

このメソッドparseContentsOfResponseは、NSMutableDictionary に解析されたドキュメント コンテンツを入力します。データを頻繁に移動することを避け、コピーを作成するのではなく、スレッドを生成したメインループにデータを割り当て直したいと考えています。まず、それは可能ですか?そうでない場合は、メインスレッドから割り当てられたポインターを渡し、「dictionaryWithDictionary」メソッドで割り当てることができますか? それはとても非効率的なようです。

parseContentsOfResponse

最初の解析セクション

各セクションは、その elementStart が通知されると、要素文字列を作成します。elementEnd は、オブジェクトを辞書に追加し、要素を解放します。残りの詳細は冗長です。注意すべき点は、割り当てが NSZone に向けられていないため、スレッドのメモリ プールに存在する必要があることです。

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

iphone - 手動で生成されたスレッドで UIGetScreenImage() を呼び出すと、ログに "_NSAutoreleaseNoPool():" メッセージが出力されます

これは、で指定されているセレクターの本体です。NSThread +detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument

自動解放プールが存在する場合でも、次のように呼び出すと、これがログに出力されますUIGetScreenImage()

他の誰かがUIGetScreenImage()別のスレッドでこれを見たことがありますか?

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

objective-c - UIApplication ループの AutoreleasePool

iPhone アプリのデフォルト コードで始まるアプリがあります。

アプリが停止しないため、[pool release]が呼び出されることはありません。アプリの自動解放されたオブジェクトを定期的に破棄するUIApplicationMain独自の標準 UI ループはありますか? それとも、自分のコードのある時点で、自分の責任でAutoreleasePool新しいものを使用する必要がありましたか?AutoreleasePool

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

objective-c - 自動解放オブジェクトを早期解放できますか?

つまり、私がこれを行った場合、オブジェクトはすぐに解放され、プールによって解放される必要はありませんか?

これに関するドキュメントで明確な説明が見つかりません。

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

objective-c - Objective-Cの自動解放プールがオブジェクトを解放しない

私はObjective-Cを初めて使用し、メモリ管理を読んでいました。NSAutoreleasePoolで少し遊んでみましたが、どういうわけかオブジェクトが解放されません。

基本的にNSString*nameを設定するsetterとgetterを持つクラスがあります。プールを解放した後、オブジェクトをNSLogしようとしましたが、それでも機能しますが、そうではないと思いますか?

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

iphone - NSRunLoopを起動し、空になるNSAutoreleasePoolがあることを確認するにはどうすればよいですか?

非同期ネットワーク操作を含むいくつかの「サブタスク」に依存する「同期」タスクがありますが、これらはすべて単一のにアクセスする必要がありますNSManagedObjectContext。sのスレッド要件によりNSManagedObjectContext、これらのサブタスクをすべて同じスレッドで実行する必要があります。これらのタスクのいくつかで実行される処理の量のために、私はそれらがバックグラウンドスレッド上にある必要があります。

現時点では、シングルトンSyncEngineオブジェクトの-initメソッドでこれを実行して、新しいスレッドを起動しています。

メソッドは次の-initializeSyncThreadようになります。

NSRunLoopこれは、このスレッドを起動する正しい方法ですか?それを行うためのより良い方法はありますか?実行ループは「performSelector」ソースを処理するだけでよく、それ(およびそのスレッド)はプロセスの存続期間中存在する必要があります。

の設定に関してはNSAutoreleasePool、Run Loop Observersを使用して自動解放プールを作成し、実行するたびにそれを排出することでこれを行う必要がありますか?

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

iphone - iPhone: マルチスレッド環境で UIViewController を解放する際の問題

UIViewController があり、そのコントローラーで、URL ソースから画像を取得しています。画像は別のスレッドでフェッチされ、その後メイン スレッドでユーザー インターフェイスが更新されます。このコントローラーは、表示されなくなったコントローラーを解放するために実装された UIScrollView 親のページとして表示されます。

UIViewController が解放される前にスレッドがコンテンツのフェッチを終了すると、すべて正常に動作しますが、スレッドが終了する前にユーザーが別のページにスクロールすると、コントローラーが解放され、コントローラーへの唯一のハンドルがコントローラーの releaseCount を作成するスレッドによって所有されます。これで、スレッドが NSAutoreleasePool を排出するとすぐに、releaseCount が 0 になるため、コントローラーが解放されます。この時点で、アプリケーションがクラッシュし、次のエラー メッセージが表示されます。

bool _WebTryThreadLock(bool), 0x4d99c60: メイン スレッドまたは Web スレッド以外のスレッドから Web ロックを取得しようとしました。これは、セカンダリ スレッドから UIKit を呼び出した結果である可能性があります。現在クラッシュ中...

バックトレースは、[super dealloc] の呼び出しでアプリケーションがクラッシュしたことを示しています。これは、プールがドレインされたときにスレッドによって dealloc 関数がトリガーされたに違いないため、完全に理にかなっています。私の質問は、このエラーを克服し、メモリをリークすることなくコントローラーを解放するにはどうすればよいですか?

私が試した解決策の 1 つは、プールが空になる前に [自己保持] を呼び出して、retainCount がゼロにならないようにし、次のコードを使用してメイン スレッドでコントローラーを解放することでした。

残念ながら、これはうまくいきませんでした。以下は、スレッドで実行される関数です。

助けてください!前もって感謝します。

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

iphone - MKMapview regionDidChangeAnimated メソッド内で NSAutoreleasepool を使用しているときにアプリケーションがクラッシュする

ユーザーが地図ビューを変更するたびに、(Zillow アプリのように) ピンをドロップしたいという点で、私は地図アプリケーションに取り組んでいます。次のコードコードを使用しています。NSAutoreleasepool を使用してサーバーから xml データをロードし、バックグラウンド スレッドで xml 解析を実行しようとしています。

  • (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated{

    NSLog(@"領域内が変更されました");

    /li>

}

-(void)callParsing{

}

上記のコードは正常に動作していますが、マップビューを変更すると、アプリケーションがクラッシュします。誰でも問題を解決するのを手伝ってくれますか?

前もって感謝します。