7

アプリでインストゥルメントを使用しているときにこのことを見ました。アプリをプロファイリングすると、最初に占有されたメモリは563 KBUIImagePickerControllerで、ポップアップする前です。最初のviewControllerには、をUIImagePickerController表示させるボタンが1つあります。
が表示されるとすぐにUIImagePickerController、メモリ占有量は1.6 ~ 1.7 MBに達します。画像を選択するかキャンセルしてもUIImagePickerController、占有されているメモリは1.6 ~ 1.7 MBであり、 563 KB (または数 KB 以上) になるはずです。
私が使用した以下のコードを参照してください。

- (IBAction)chooseButtonPressed:(id)sender
{
    UIImagePickerController *pickerController = [[UIImagePickerController new]autorelease];
    [pickerController setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
    [pickerController setDelegate:self];
}  

メモリが解放されないのはなぜですか?

ここに画像の説明を入力

4

4 に答える 4

1

自動解放オプションを指定したため、自動解放プールに追加されます...ドキュメントの内容を参照してください..

アプリケーション キットは、イベント ループの各サイクルの開始時にメイン スレッドに自動解放プールを作成し、最後にそれを排出することで、イベントの処理中に生成された自動解放されたオブジェクトを解放します。

このように、いつでもデリゲート呼び出しでピッカーを解放できます..

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
...
...
[picker release];

}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
....
....
[picker release];

}
于 2012-03-12T06:45:17.193 に答える
1

コメントに画像を追加することはできないので、これを回答にしています。メモリが最初に割り当て解除されるまで、例外はLive Bytes常に例外よりも小さくなります。Overall Bytesこれは下の画像から見ることができます。

ここに画像の説明を入力

あなたの処分に問題はないと思います。間違った値を見ているだけだと思います!

編集-問題は別の場所にあると思います。私が見ていた値を確認するには、少し変更を加える必要があります。下の画像に示すように、Only track active allocations探している値を表示するには、オプションのチェックを外す必要があります。それでも 7.41 MB が表示される場合Active allocations、問題は別のものです。

ここに画像の説明を入力

于 2012-03-12T08:51:55.753 に答える
0

これを試して

UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentModalViewController:picker animated:YES];
[picker release];
于 2012-03-12T06:35:14.710 に答える
0

デリゲートを に設定しましたnilか?

詳細については、UIImagePickerConrtoller クラス リファレンスを参照してください。

[picker release];
picker.delegate = nil ;

これがお役に立てば幸いです。

于 2012-03-12T07:13:15.583 に答える