4

UIImageJPEGRepresentation を使用するとメモリ警告が表示されます。これを回避する方法はありますか? アプリがクラッシュすることはありませんが、可能であれば避けたいと思います。断続的に実行されません[[UIApplication sharedApplication] openURL:url];

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage];
    NSData *imageToUpload = UIImageJPEGRepresentation(image, 1.0);

    // code that sends the image to a web service (omitted)
    // on success from the service
    // this sometime does not get run, I assume it has to do with the memory warning?
    [[UIApplication sharedApplication] openURL:url];
}
4

3 に答える 3

4

ARC: @autoreleasepool の小さなブロック内にコードを配置するだけです

 @autoreleasepool {
     NSData *data = UIImageJPEGRepresentation(img, 0.5);
     // something with data
}
于 2016-07-29T15:06:50.273 に答える
1

書式設定と画像の回答として提示されます。

計測器を使用して、保持されているがリークされていないメモリによるリークとメモリ損失をチェックします。後者は、まだポイントされている未使用のメモリです。インストルメントの割り当てインストゥルメントでマーク生成 (ヒープショット) を使用します。

Heapshot を使用してメモリ クリープを検出する方法については、bbum ブログを参照してください。

基本的な方法は、Instruments 割り当てツールを実行し、ヒープショットを取得し、コードの反復を実行して、別のヒープショットを 3 ~ 4 回繰り返すことです。これは、反復中に割り当てられ、解放されないメモリを示します。

結果を把握するには、個々の割り当てを確認してください。

オブジェクトの保持、解放、および自動解放が発生する場所を確認する必要がある場合は、インストゥルメントを使用します。

計測器で実行し、割り当てで「参照カウントの記録」をオンに設定します (Xcode 5 以前では、オプションを設定するには記録を停止する必要があります)。アプリを実行し、記録を停止し、ドリルダウンすると、すべての保持、解放、および自動解放が発生した場所を確認できます。

于 2014-08-11T17:38:48.493 に答える