iPhoneのカメラロールから最後の写真を取得しようとしています。次のコードを使用します。
UIImage* __block image = [[UIImage alloc] init];
ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup* group, BOOL* stop) {
[group setAssetsFilter:[ALAssetsFilter allPhotos]];
if ([group numberOfAssets] > 0) {
[group enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndex:[group numberOfAssets]-1] options:NSEnumerationConcurrent usingBlock:^(ALAsset* alAsset, NSUInteger index, BOOL* innerStop) {
if (alAsset) {
ALAssetRepresentation* rawImage = [alAsset defaultRepresentation];
image = [UIImage imageWithCGImage:[rawImage fullScreenImage]];
[self doTheJobWithImage:image];
// Inside doTheJobWithImage: a segue is also performed at the end
}
}];
}
} failureBlock:^(NSError* error) {
NSLog(@"Error: %@", [error localizedDescription]);
}];
動作しますが、欠陥があります (デバッグに Instruments and Zombies を使用しています)。
- カメラロール内のすべての画像を読み取るようです。では、最初の質問: enumerateAssetsAtIndexes ではなく、指定された画像 (atIndexes) のみを取得しますか? コードの何が問題になっていますか?
- 前の問題に加えて、多くの写真がカメラ ロールにある場合、メモリが問題になります。アプリが多すぎるとクラッシュするか、機能する場合は、取得した画像の割り当てが解除されないように見えるため、このコードを 2 回目または 3 回呼び出すと、メモリ リークが原因でクラッシュします。2 番目の質問: doTheJobWithImage: を呼び出した後、コードにすべての割り当てを強制的に解除するにはどうすればよいですか?
xcode 4.6、ios 6、および ARC を使用しています。前もって感謝します。