2017-05-15 12 views
0

iPhoneのフォトライブラリに約7000枚の画像があります。ここで私はすべての画像を取得する方法です:PHAssetResourceデータを取得するパフォーマンスを向上させるにはどうすればよいですか?

[allPhotos enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 

      PHAsset *asset = (PHAsset *)obj; 
      NSLog(@"idx = %lu", (unsigned long)idx); 
}]; 

上記のコードは、7000枚の画像を通過するのに約3秒かかります。

私の質問は、「オリジナルファイル名」を取得したいときです。非常に遅くなり、各画像で約0.5秒かかります。

NSArray *resources = [PHAssetResource assetResourcesForAsset:asset]; 

私を助けてください:

[allPhotos enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 

     PHAsset *asset = (PHAsset *)obj; 

     NSArray *resources = [PHAssetResource assetResourcesForAsset:asset]; 
     NSString *path = ((PHAssetResource *)resources[0]).originalFilename; 
     path = [path lowercaseString]; 

     NSLog(@"idx = %lu", (unsigned long)idx); 
}]; 

このコード行は、以下の貧弱な性能を有しています。

+0

を使用することができますか? 「好奇心」 – iphonic

+0

これを使って、外部ストレージから画像を比較する必要があります。画像がiOSフォトライブラリに既に存在するかどうか確認してください。 –

+0

「外部ストレージ」のコンテンツにアクセスできますか?イメージを比較するのではなく、イメージのEXIF情報を比較することができます。[PHAsset-Meta](https://github.com/alexanderkent/PHAsset-Meta)や[PHAsset-Utility] https://github.com/zakkhoyt/PHAsset-Utility)。 – iphonic

答えて

0

あなただけoriginalFilenameが必要な場合は、論理的になぜあなたは一度に7000枚の画像の元のファイル名が必要になります

NSString *fileName = [asset valueForKey:@"filename"]; 
関連する問題