一段代码的几个小问题,万分感谢

时间:2021-01-27 09:32:22
#pragma mark - Private Method

-(void)_addAssetURL:(NSURL *)assetURL
            toAlbum:(NSString *)albumName
       failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock {
  __block BOOL albumWasFound = NO;
  
  ALAssetsLibraryGroupsEnumerationResultsBlock enumerationBlock;
  enumerationBlock = ^(ALAssetsGroup *group, BOOL *stop) {
    // compare the names of the albums
    if ([albumName compare:[group valueForProperty:ALAssetsGroupPropertyName]] == NSOrderedSame) {
      // target album is found
      albumWasFound = YES;
      
      // get a hold of the photo's asset instance
      [self assetForURL:assetURL 
            resultBlock:^(ALAsset *asset) {
              // add photo to the target album
              [group addAsset:asset];
            }
           failureBlock:failureBlock];
      
      // album was found, bail out of the method
      return;
    }
    
    if (group == nil && albumWasFound == NO) {
      // photo albums are over, target album does not exist, thus create it
      
      // Since you use the assets library inside the block,
      //   ARC will complain on compile time that there’s a retain cycle.
      //   When you have this – you just make a weak copy of your object.
      //
      //   __weak ALAssetsLibrary * weakSelf = self;
      //
      // by @Marin.
      //
      // I don't use ARC right now, and it leads a warning.
      // by @Kjuly
      ALAssetsLibrary * weakSelf = self;
      
      // create new assets album
      [self addAssetsGroupAlbumWithName:albumName 
                            resultBlock:^(ALAssetsGroup *group) {
                              // get the photo's instance
                              [weakSelf assetForURL:assetURL 
                                        resultBlock:^(ALAsset *asset) {
                                          // add photo to the newly created album
                                          [group addAsset:asset];
                                        }
                                       failureBlock:failureBlock];
                            }
                           failureBlock:failureBlock];
      
      // should be the last iteration anyway, but just in case
      return;
    }
  };
  
  // search all photo albums in the library
  [self enumerateGroupsWithTypes:ALAssetsGroupAlbum 
                      usingBlock:enumerationBlock
                    failureBlock:failureBlock];
}


第9行的enumerationBlock = ^(ALAssetsGroup *group, BOOL *stop) {是什么意思?这个group是哪里定义的呢?

2 个解决方案

#1


还是先了解一下有关block知识吧,了解后再来看代码
enumerationBlock 的定义如下:

typedef  void(^enumerationBlock) (ALAssetsGroup *group, BOOL *stop)

其中的参数要根据你的需要定义,如果你想将哪些数据回传,你就定义哪些数据。如上这个block.它是将 ALAssetsGroup 和 布尔类型的stop回传

#2


addAssetsGroupAlbumWithName  这是个方法,resultBlock 是方法的参数,也就是说可以把一段过程(函数)当作变量参数定义、传递。

resultBlock 你查下 addAssetsGroupAlbumWithName 这个方法 和 对应的参数  resultBlock 这个参数的含义, 就明白了

#1


还是先了解一下有关block知识吧,了解后再来看代码
enumerationBlock 的定义如下:

typedef  void(^enumerationBlock) (ALAssetsGroup *group, BOOL *stop)

其中的参数要根据你的需要定义,如果你想将哪些数据回传,你就定义哪些数据。如上这个block.它是将 ALAssetsGroup 和 布尔类型的stop回传

#2


addAssetsGroupAlbumWithName  这是个方法,resultBlock 是方法的参数,也就是说可以把一段过程(函数)当作变量参数定义、传递。

resultBlock 你查下 addAssetsGroupAlbumWithName 这个方法 和 对应的参数  resultBlock 这个参数的含义, 就明白了