我使用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主体。此外,我不想阻止此操作,因此我需要在发送最后一张图片时收到通知。
答案 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
});