NSArray enmuerateUsingBlock,一个在另一个里面,如何停止外部枚举?

问题描述:

我创建使用一个NSMutableArray的二维阵列,并且有一种方法:NSArray enmuerateUsingBlock,一个在另一个里面,如何停止外部枚举?

- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger row, NSUInteger column, BOOL *stop))block 
{ 
    [self.internalArray enumerateObjectsUsingBlock:^(id obj, NSUInteger rowIdx, BOOL *stopRow){ 
     NSMutableArray *rowArray = obj; 
     [rowArray enumerateObjectsUsingBlock:^(id obj, NSUInteger columnIdx, BOOL *stopColumn){ 
      block(obj, rowIdx, columnIdx, stopColumn); 
     }]; 
    }]; 
} 

我注意到的是,如果“块”设置stopColumn为YES,则我需要一种方法,通知外块stopRow应该是为好,我不知道如果我能:

  1. 只使用一个BOOL *停止,而不是stopRow和stopColumn(因为我使用ARC),或
  2. 添加BOOL ISSTOP内部外块和内部块可以将其设置为stopColumn?

这应该工作:

- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger row, NSUInteger column, BOOL *stop))block 
{ 
    [self.internalArray enumerateObjectsUsingBlock:^(id obj, NSUInteger rowIdx, BOOL *stopRow){ 
     NSMutableArray *rowArray = obj; 
     [rowArray enumerateObjectsUsingBlock:^(id obj, NSUInteger columnIdx, BOOL *stopColumn) { 
      block(obj, rowIdx, columnIdx, stopColumn); 
      // Add this line: 
      *stopRow = *stopColumn; 
     }]; 
    }]; 
} 

块应该捕获所有的变量,它的机身采用,包括stopRow指针。既然你不修改指针本身,只有它指向的数据,你不需要做任何事情(如果你需要修改指针本身,你需要一个额外的临时变量,声明为__block)。