我使用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
出了什麼問題?
經過更多的調查後,我發現這是事實。我已經註冊了ALAssetsLibraryChangedNotification,並且在被調用的方法中,我分配了一個ALAssetsLibrary的實例,但從未在枚舉完成後釋放它(我只是在故障塊中釋放它)。 – 2011-06-02 03:20:37
很高興你明白了,我還添加了Object Alloc,希望你使用(或泄漏)來找到問題比使用Time Profiler快一點。 – 2011-06-02 04:45:43