我使用一个nsmutalearray创建了一个二维数组,并且有一个方法:
- (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也应该是YES,我不确定是否可以:
- 只使用一个BOOL*停止,而不是stopRow和stopColumn(就像我使用ARC一样),或者
- 在外部块中添加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
的额外临时变量)。