2013-03-27 64 views
0

我正在尋找最快的方法來統計ALAssetLibrary中的項目數量。至少在這一點上,我沒有關心/存在什麼,只是關於許多事情。計算ALAssetLibrary的最快方法是什麼?

對於音樂/音樂視頻很容易:

MPMediaQuery* query = [[MPMediaQuery alloc] init]; 
int numItems = [[query items] count]; 

對於ALAssetLibrary,我已經能夠拿出最好的東西瘋狂的這樣的(由手來打字,所以可能有誤差):

ALAssetsLibrary* assetLibrary = [[ALAssetsLibrary alloc] init]; 
    ALAssetsGroupType groupType = ALAssetsGroupAll; 
    int numAssets=0; 

    [assetLibrary enumerateGroupsWithTypes:groupType 
           usingBlock:^(ALAssetsGroup* group, BOOL* stop){ 
     if (group) 
     { 
      [group enumerateAssetsUsingBlock:^(ALAsset* asset, NSUInteger index, BOOL* innerstop) 
       { 
        if (asset) 
        { 
         numAssets++; 
        } 
       }]; 
     } 
    }]; 

我可以看到,如果我只用了10張圖片/視頻,但即使是在移動設備上,它很容易可能有成千上萬。另外,因爲它在塊中,所以我必須圍繞此代碼設置鎖,以使其同步,進一步放慢速度。

有/有一個更好的方法來做這種事情。任何人?

-Ken

+1

爲什麼你必須設置鎖,使其同步? – 2013-03-27 14:29:05

回答

2

有,確實是一個更好的辦法:

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 
int __block numAssets = 0; 
[library enumerateGroupsWithTypes:ALAssetsGroupAll 
    usingBlock:^(ALAssetsGroup *group, BOOL *stop) { 
     if (group) 
      numAssets += group.numberOfAssets; 
     else 
      NSLog(@"Asset count is: %i", numAssets); 
     } 
     failureBlock:^(NSError *err) { 
      NSLog(@"Failure"); 
     }]; 
相關問題