1

私のアプリは、写真を撮ったり、カメラロールから写真を選択したりできます.Iを使用して、ユーザーが画像をトリミングできる場所に UIImagePicker写真を送信します.ViewController

最終結果にはUITableView名前とサムネイルがあり、すべての行がフル サイズの画像につながります。サムネイルは原画の縮尺を変えたものです。

これは、トリミング後に写真を保存する方法です。

[UIImageJPEGRepresentation(_justNowImage.image, 0.1) writeToFile:jpgPath atomically:NO];

これは、サムネイルまたはフルサイズで開く方法です。

_imageInPocket.image = [UIImage imageWithContentsOfFile:jpgPath];

小さな画像をトリミングするとすべて正常に動作しますが、大きな画像 (2 MB 以上) をトリミングしようとすると、おそらくメモリ不足が原因でアプリがクラッシュします。

私のプロジェクトは ARC を使用しています。どうにかしてメモリから画像を解放する必要がありますか? UITableViewにすべての元の画像をロードして に合わせて縮尺を変更するのではなく、画像の小さなバージョンを作成してサムネイルとして使用する必要がありCellますか?

4

1 に答える 1

1

たぶん、あなたはデータをロードし、それを使用して画像に変換する必要があります

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
NSURL *url = [NSURL URLWithString:@"Your URL"];
NSURLRequest *theRequest = [NSURLRequest
    requestWithURL: url
    cachePolicy: NSURLRequestUseProtocolCachePolicy
    timeoutInterval: 60.0
];

この方法を使用すると、画像がパケットで取得されます。この後、すべてのパケットを呼び出して収集する必要があります

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
 [imageData appendData:data];
}

この後、データを画像に変換して接続を閉じる必要があります

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
  UIImage *image = [UIImage imageWithData:imageData];
  imageView.image = image;
  [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}
于 2013-03-04T08:08:46.260 に答える