序列化添加AFNetwork呼叫

时间:2014-07-04 19:24:08

标签: afnetworking afnetworking-2

我使用AFNetworking(POST)将多张照片上传到服务器。它运行良好,除了iPhone 4 / 4S,我遇到了内存问题。问题是所有有效载荷都是预先构建的并填满了内存;请求的构建速度要快得多。

比连续执行我的AFNetworking呼叫要好,我需要等待每次呼叫: self.manager POST:parameters:success:failure:完成再次调用之前完成。我的代码是这样的:

迭代一组图像
  [self sendTheImageToTheServer:图片完成:{好,我已经完成了。现在发给我下一个。 }];
  // sendTheImageToTheServer:图片调用self.manager POST:parameters:success:failure:
完成

理想情况下,我想使用调度组,以便在最后一个块完成后收到警报。

任何建议都会很棒。

编辑:我不能使用setMaxConcurrentOperationCount来帮助解决这个问题,因为我的所有有效负载都是预先构建的并且填满了内存;我使用AFNetworking constructingBodyWithBlock来构建我的POST主体。此外,我不想阻止此操作,因此我需要在发送最后一张图片时收到通知。

1 个答案:

答案 0 :(得分:0)

固定。这是有用的:

dispatch_queue_t queue;
queue = dispatch_queue_create("com.example.MyQueue", NULL);

for (FBPhoto *photo in page.images) {
   dispatch_async(queue, ^{
     @autoreleasepool {
        dispatch_semaphore_t sem = dispatch_semaphore_create(0);
           [self addPhotoToUploadQueue:photo callback:^{
             dispatch_semaphore_signal(sem);
            }];
        dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
     }
   });
}

此位代码可用于阻止发送最后一个图像的时间,或者更确切地说是处理队列中的最后一个项目:

dispatch_barrier_async(queue, ^{
    // all done
});