2011-06-02 21 views
1

我使用api「writeImageDataToSavedPhotosAlbum」將圖像保存到iPhone的相冊中。但是,經過多次使用(例如4次)後,每次開始需要約兩倍的時間才能保存。writeImageDataToSavedPhotosAlbum在幾次使用後顯着變慢

我已經創建了一個測試方法來重現它,它每次都保存完全相同的圖像。方法如下:

-(IBAction)testButton { 
    NSData *data = [NSData dataWithContentsOfFile:[[self photosDirectory] stringByAppendingPathComponent:[[self contentsOfPhotoDirectory] objectAtIndex:0]]]; 
    ALAssetsLibrary *al = [[ALAssetsLibrary alloc] init]; 
    __block NSDate *date = [[NSDate date] retain]; 
    [al writeImageDataToSavedPhotosAlbum:data metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) { 
     NSLog(@"Saving Time: %g", [[NSDate date] timeIntervalSinceDate:date]); 
     [date release]; 
    }]; 
    [al release]; 
} 

在新鮮重新啓動的iPhone 4上,我得到以下保存時間。

2011-06-01 21:23:13.641 myapp[95:707] Saving Time: 5.30819 
2011-06-01 21:23:17.101 myapp[95:707] Saving Time: 1.5311 
2011-06-01 21:23:21.916 myapp[95:707] Saving Time: 2.52412 
2011-06-01 21:23:25.974 myapp[95:707] Saving Time: 2.85623 
2011-06-01 21:23:32.275 myapp[95:707] Saving Time: 4.93484 
2011-06-01 21:23:42.024 myapp[95:707] Saving Time: 7.93288 
2011-06-01 21:24:00.317 myapp[95:707] Saving Time: 15.8561 
2011-06-01 21:24:33.199 myapp[95:707] Saving Time: 29.7571 

出了什麼問題?

回答

2

可能問題在於您使用的是內存而不是釋放它,因此後來保存會生成大量內存警告......這正是Time Profiler和Object Alloc儀器應該能夠幫助您的那種事情找出爲什麼它會在幾張圖像後變慢。

在我自己的應用程序中,我不認爲我在重複拍攝後看到了很多放緩。

+0

經過更多的調查後,我發現這是事實。我已經註冊了ALAssetsLibraryChangedNotification,並且在被調用的方法中,我分配了一個ALAssetsLibrary的實例,但從未在枚舉完成後釋放它(我只是在故障塊中釋放它)。 – 2011-06-02 03:20:37

+0

很高興你明白了,我還添加了Object Alloc,希望你使用(或泄漏)來找到問題比使用Time Profiler快一點。 – 2011-06-02 04:45:43

0

使用ARC進行內存管理。我正在使用這種方法保存在我正在寫的相機應用程序中,並且沒有類似您的問題。

相關問題