佚名通过本文主要向大家介绍了异步电机怎么判断烧毁,异步判断,如何提高判断力,提高判断力,如何提高自己的判断力等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:如何提高判断力 如何判断一个异步操作循环完全结束了呢?
描述:
解决方案1:
描述:
需求 : 获取相册信息后获取第一张图片并为self.editImageView
赋值显示.
问题 : 但是我现在想在getImageForCollectionView
完全结束后来为self.editImageView
赋值,那么问题来了,我如何才能判断getImageForCollectionView
函数已经进行完毕?
- (void)getImageForCollectionView{
_library = [[ALAssetsLibrary alloc] init];
self.photos = [NSMutableDictionary dictionary];
[_library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (group) {
NSMutableArray *array = [NSMutableArray array];
[group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
if (result) {
[array addObject:result];
}
}];
[self.photos setValue:array forKey:[group valueForProperty:@"ALAssetsGroupPropertyName"]];
}
} failureBlock:^(NSError *error) {
}];
}
解决方案1:
将耗时的操作放在非主线程中,需要UI更新的放在主线程中。
__weak typeof(self) weakSelf = self;
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// not in main block task
[weakSelf getImageForCollectionView];
dispatch_async(dispatch_get_main_queue(), ^{
// main block. change ui
NSLog(@"%@", weakSelf.photos);
});
});
EDIT:
- (void)getImageForCollectionView:(void(^)(void))callback {
_library = [[ALAssetsLibrary alloc] init];
self.photos = [NSMutableDictionary dictionary];
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[_library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (group) {
NSMutableArray *array = [NSMutableArray array];
[group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
if (result) {
[array addObject:result];
}
}];
[self.photos setValue:array forKey:[group valueForProperty:@"ALAssetsGroupPropertyName"]];
}
} failureBlock:^(NSError *error) {
}];
dispatch_async(dispatch_get_main_queue(), ^{
callback();
});
});
}
[self getImageForCollectionView:^{
// ...
NSLog(@"%@", self.photos);
}];