如何在iOS中的Flickr上同步上传图像?

时间:2014-11-13 04:41:13

标签: ios image-uploading flickr

我正在使用一个应用程序,我必须在flickr上传图像。当我一次选择15-20个图像并调用上传方法时,它开始上传并且没有问题,但问题是当选择超过40个图像并立即开始上传时,其内存增加超过300mb并且应用程序崩溃。我不知道这是iOS操作系统或Flickr api的架构问题,它会立即开始上传所有图像。有没有办法我一次发送一个图像,上传后我发送第二个图像,所以一次只上传一个图像,没有内存问题。 我的一些关于flickr的上传方法:

-(void)startupuploader:(NSString *)filePath{

        image=YES;

        NSLog(@"filepath in flicke : %@",filePath);

        JPEGData = [[NSData alloc]initWithContentsOfFile:filePath];

        // NSLog(@"JPEGData in flicke : %@",JPEGData);

        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:filePath]];

        NSLog(@"data in flicke : %@",data);




        [self.flickrRequest uploadImageStream:[NSInputStream inputStreamWithData:JPEGData] suggestedFilename:@"Flickr"

                                     MIMEType:@"image/jpeg" arguments:[NSDictionary dictionaryWithObjectsAndKeys:@"0", @"is_public", nil]];
  [UIApplication sharedApplication].idleTimerDisabled = YES;

  }

当我调用此方法进行上传时,它会立即执行所有路径并立即开始上传所有图像,从而导致应用程序崩溃。  请帮帮我。         提前谢谢。

1 个答案:

答案 0 :(得分:0)

有几点想法:

  1. 不是按顺序执行,(为此你会支付严重的性能损失)我可能会建议同时执行此操作,但要控制并发度。例如,我可能建议在NSOperation中包装上传,并将这些操作添加到操作队列中,其中maxConcurrentOperationCount为4或5.这样您就可以享受一些并发性(以及将产生的性能增益),但是它限制它,所以你不会耗尽有限的网络连接或一次消耗太多的内存。

    我很难比这更具体,因为我不熟悉这种uploadImageStream方法。这是你自己的方法(在这种情况下你应该更新你的问题向我们展示这个方法)还是Flickr提供的方法?通常,如果方法异步运行,则它们提供完成块或委托方法以指示完成。您需要一些完成模式才能通过NSOperationQueue享受受控程度的并发性。

  2. 不是将文件加载到NSData然后从中创建流,而是为什么不创建[NSInputStream inputStreamWithFileAtPath:filePath],并完全绕过NSData。这应该严重限制内存使用,这本身就是一切。您当前的模式将尝试同时将所有这些图像完全加载到内存中。通过使用流,它将减少在任何给定时间使用的内存量。