【问题标题】:writeImageDataToSavedPhotosAlbum Slows Dramatically After A Few Uses几次使用后 writeImageDataToSavedPhotosAlbum 显着变慢
【发布时间】:2011-09-06 18:38:42
【问题描述】:

我使用 api“writeImageDataToSavedPhotosAlbum”将图像保存到 iPhone 的相册。但是,经过多次使用(如 4 次)后,开始每次保存大约需要两倍的时间。

我创建了一个测试方法来重现它,它每次都保存完全相同的图像。方法如下:

-(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

怎么了?

【问题讨论】:

    标签: iphone ios ios4 assetslibrary


    【解决方案1】:

    问题可能是您正在使用内存而不是释放它,因此稍后的保存会产生大量内存警告...这正是 Time Profiler 和 Object Alloc 工具应该能够帮助您解决的问题,找出为什么它只在几张图片后就变慢了。

    在我自己的应用中,我认为在重复拍摄后我并没有看到这么多的减速。

    【讨论】:

    • 经过更多调查,我发现确实如此。我已经注册了 ALAssetsLibraryChangedNotification,在被调用的方法中,我分配了一个 ALAssetsLibrary 的实例,但在枚举之后从未释放它(我只在失败块中释放它)。
    • 很高兴你想通了,我还添加了 Object Alloc,希望你使用(或泄漏)比使用 Time Profiler 更快地找到问题...
    【解决方案2】:

    使用 ARC 进行内存管理。我正在使用这种保存在我正在编写的相机应用程序中的方法,并且没有像您这样的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 2021-09-06
      • 2019-10-07
      • 2023-01-20
      • 1970-01-01
      • 2016-11-05
      相关资源
      最近更新 更多