Я делаю беспорядок, и я пытаюсь найти способ умело справиться с этим, но я застрял. Моя проблема прямо сейчас заключается в том, что у меня есть выполнение кода, прежде чем я хочу, чтобы они были, и это связано с моими блоками.блок в блоке не уверен, что делать
Проблема с приведенным ниже кодом заключается в том, что метод postToForm
вызывается и выполняется до того, как мои convertedImages
были добавлены. Как я могу это исправить, поэтому он ждет, чтобы это произошло? Или я все об этом ошибаюсь? (Мне нужно знать об использовании памяти тоже нужно освободить память после того, как сообщение было сделано.)
Вот мой код, который содержит эту проблему:
// create serial queue
dispatch_queue_t queue = dispatch_queue_create("myQueue", 0);
// create dispatch group
dispatch_group_t group = dispatch_group_create();
for(id photos in photoUrls) {
NSString *urlString = photos;
// enqueue operation in queue
dispatch_async(queue, ^{
// enter the group
dispatch_group_enter(group);
// do something async, I do use another dispatch_queue for example
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
// wrap in autoreleasepool to release memory upon completion
@autoreleasepool {
// here for example the nested operation sleeps for two seconds
NSURL *url = [NSURL URLWithString:urlString];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library assetForURL:url resultBlock:^(ALAsset *asset) {
//TODO: Deal with JPG or PNG
NSData *imageData = UIImageJPEGRepresentation([self thumbnailForAsset:asset maxPixelSize:1000], 0);
NSString *base64 = [imageData base64EncodedString];
NSLog(@"base64::%@",base64);
[convertedImages addObject:base64];
} failureBlock:^(NSError *error) {
NSLog(@"that didn't work %@", error);
}];
dispatch_group_leave(group);
}
});
// wait until the nested async operation leaves the group (e.g finishes its job)
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
NSLog(@"Finished single operation.");
});
}
// will be called once all operations complete
dispatch_async(queue, ^{
NSLog(@"Finished all jobs. ");
NSLog(@"how many::%lu",(unsigned long)convertedImages.count);
[jsonWithPhotos setObject:convertedImages forKey:@"photo64"];
[self postToForm];
});
О, человек, на который я потратил столько времени на такой простой ответ! Позаботьтесь, чтобы объяснить, почему это работает правильно? – BluGeni