1

UIImagePickerController クラスでメモリ リークが発生しています。

これが私がそれを使用している方法です:

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    [self presentModalViewController:picker animated:YES];
    [picker release];

ピッカーを削除するには[picker dismissModalViewControllerAnimated:YES];didFinishPickingImageand を呼び出しますimagePickerControllerDidCancel

--

計測器は、この命令の結果として約 160 バイトのリークを示しています。

+[UIImagePickerController _loadPhotoLibraryIfNecessary]

どうやらこの問題は多くの人々を悩ませており、この問題を回避する解決策は、ライブラリから画像を選択するか、デバイスの組み込みカメラを使用してキャプチャする専用のシングルトン クラスを構築することです。

何か追加したい人いますか?

4

5 に答える 5

2

シングルトンを使用する必要性に関する最初の記事の 1 つの著者として、動機は 7/8 のイメージ キャプチャでのクラッシュを防止することであり、リークに関する特定の心配のためではありませんでした。160 バイトは厄介ですが、大きな問題ではないため、心配する必要はありません (開発者が修正できないため)。

于 2009-01-28T12:36:35.757 に答える
0

メモリリークがいくつか見られる場合はGeneralBlockSegmentMachOを使用してUIImagePickerController

CoreLocationフレームワークとMapKitフレームワークをプロジェクトに追加してみてください。インストルメントツールのリークチェックでメモリリークが発生しなくなりました。UIImagePickerControllerこれらのフレームワークとどのように関連しているかわかりません。それが良い解決策かどうかはわかりません。「使用せずに、または必要とせずにフレームワークを追加する」。

また、を使用してメモリリークが発生しましたUIImagePickerControllerこのメモリリークは、 developer.apple.comからダウンロードしたサンプルコード「PhotoLocation」と「iPhoneCoreDataRecipes」でも発生します。また、ダウンロードしたサンプルコードにこれらのフレームワークを追加して確認しました。メモリリークはもうありません。

于 2010-05-10T03:24:02.863 に答える
0

イメージをリリースするのを忘れているのかもしれません。書くたびに

UIImageView.image = image_a;

その後、image_a一度保持されます。

あなたが放すまで、最終的にリリースできるUIImageView.image = nilのはいつですか。image_a

私はこの方法で問題を解決しました。

于 2011-08-30T05:04:23.530 に答える
0

デリゲートラインを削除してみましたか? AVAudioPlayerに委任するときに同様の問題がありましたself。(アクセサーはassignどちらの場合も言いますが。)委任によってリークが解消された場合は、別のオブジェクトに委任できます。

于 2009-01-28T12:59:54.007 に答える
0

Instrumentsで見つけたメモリ割り当てリークがありました。私が行っていたのは、イメージ ピッカーを開いたり閉じたり (開く/キャンセル) し、Apple コード、自分のコード、他の人のコードを使用することだけでした。

あたかもピッカーが解放されていないかのように、すべてが毎回割り当てが増えていくのを示していました。解放しようとすると、クラッシュします (オーバーリリース)。

次に、基本的に次のような非常に役立つ Web ページを見つけました。

「これは、デバイスでのテストでは発生しません」

そこで、シミュレーターから切り替えて、デバイスでテストを実行しました。見よ、割り当ての増加はなく、正常に動作しました。

しかし、これは完全に悪であり、信頼できる仕事をするためにシミュレーターを信頼することはできません。これがあなたの特定の問題に関連しているかどうかにかかわらず、私はあなたに追加する何かを取り上げました。追加することは、シミュレーターでメモリをテストしないことです!

于 2011-01-26T04:54:54.793 に答える