Remove bachUpdate and begin/endUpdate

This commit is contained in:
Li Tan
2014-12-18 20:28:57 -08:00
parent 7e79950112
commit 9367ccc19c
4 changed files with 64 additions and 42 deletions

View File

@@ -348,11 +348,9 @@ static BOOL _isInterceptedSelector(SEL sel)
} }
} }
#pragma mark - #pragma mark -
#pragma mark ASRangeControllerDelegate. #pragma mark ASRangeControllerDelegate.
- (NSArray *)rangeControllerVisibleNodeIndexPaths:(ASRangeController *)rangeController - (NSArray *)rangeControllerVisibleNodeIndexPaths:(ASRangeController *)rangeController
{ {
ASDisplayNodeAssertMainThread(); ASDisplayNodeAssertMainThread();
@@ -372,36 +370,28 @@ static BOOL _isInterceptedSelector(SEL sel)
- (void)rangeController:(ASRangeController *)rangeController didInsertNodesAtIndexPaths:(NSArray *)indexPaths { - (void)rangeController:(ASRangeController *)rangeController didInsertNodesAtIndexPaths:(NSArray *)indexPaths {
ASDisplayNodeAssertMainThread(); ASDisplayNodeAssertMainThread();
[UIView performWithoutAnimation:^{ [UIView performWithoutAnimation:^{
[self performBatchUpdates:^{ [super insertItemsAtIndexPaths:indexPaths];
[super insertItemsAtIndexPaths:indexPaths];
} completion:nil];
}]; }];
} }
- (void)rangeController:(ASRangeController *)rangeController didDeleteNodesAtIndexPaths:(NSArray *)indexPaths { - (void)rangeController:(ASRangeController *)rangeController didDeleteNodesAtIndexPaths:(NSArray *)indexPaths {
ASDisplayNodeAssertMainThread(); ASDisplayNodeAssertMainThread();
[UIView performWithoutAnimation:^{ [UIView performWithoutAnimation:^{
[self performBatchUpdates:^{ [super deleteItemsAtIndexPaths:indexPaths];
[super deleteItemsAtIndexPaths:indexPaths];
} completion:nil];
}]; }];
} }
- (void)rangeController:(ASRangeController *)rangeController didInsertSectionsAtIndexSet:(NSIndexSet *)indexSet { - (void)rangeController:(ASRangeController *)rangeController didInsertSectionsAtIndexSet:(NSIndexSet *)indexSet {
ASDisplayNodeAssertMainThread(); ASDisplayNodeAssertMainThread();
[UIView performWithoutAnimation:^{ [UIView performWithoutAnimation:^{
[self performBatchUpdates:^{ [super insertSections:indexSet];
[super insertSections:indexSet];
} completion:nil];
}]; }];
} }
- (void)rangeController:(ASRangeController *)rangeController didDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet { - (void)rangeController:(ASRangeController *)rangeController didDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet {
ASDisplayNodeAssertMainThread(); ASDisplayNodeAssertMainThread();
[UIView performWithoutAnimation:^{ [UIView performWithoutAnimation:^{
[self performBatchUpdates:^{ [super deleteSections:indexSet];
[super deleteSections:indexSet];
} completion:nil];
}]; }];
} }

View File

@@ -361,9 +361,7 @@ static BOOL _isInterceptedSelector(SEL sel)
ASDisplayNodeAssertMainThread(); ASDisplayNodeAssertMainThread();
[UIView performWithoutAnimation:^{ [UIView performWithoutAnimation:^{
[super beginUpdates];
[super insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone]; [super insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];
[super endUpdates];
}]; }];
} }
@@ -371,9 +369,7 @@ static BOOL _isInterceptedSelector(SEL sel)
ASDisplayNodeAssertMainThread(); ASDisplayNodeAssertMainThread();
[UIView performWithoutAnimation:^{ [UIView performWithoutAnimation:^{
[super beginUpdates];
[super deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone]; [super deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];
[super endUpdates];
}]; }];
} }
@@ -381,9 +377,7 @@ static BOOL _isInterceptedSelector(SEL sel)
ASDisplayNodeAssertMainThread(); ASDisplayNodeAssertMainThread();
[UIView performWithoutAnimation:^{ [UIView performWithoutAnimation:^{
[super beginUpdates];
[super insertSections:indexSet withRowAnimation:UITableViewRowAnimationNone]; [super insertSections:indexSet withRowAnimation:UITableViewRowAnimationNone];
[super endUpdates];
}]; }];
} }
@@ -391,9 +385,7 @@ static BOOL _isInterceptedSelector(SEL sel)
ASDisplayNodeAssertMainThread(); ASDisplayNodeAssertMainThread();
[UIView performWithoutAnimation:^{ [UIView performWithoutAnimation:^{
[super beginUpdates];
[super deleteSections:indexSet withRowAnimation:UITableViewRowAnimationNone]; [super deleteSections:indexSet withRowAnimation:UITableViewRowAnimationNone];
[super endUpdates];
}]; }];
} }

View File

@@ -95,4 +95,26 @@
*/ */
- (void)rangeController:(ASRangeController *)rangeController didDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet; - (void)rangeController:(ASRangeController *)rangeController didDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet;
@optional
/**
* Called before nodes insertion.
*/
- (void)rangeController:(ASRangeController *)rangeController willInsertNodesAtIndexPaths:(NSArray *)indexPaths;
/**
* Called before nodes deletion.
*/
- (void)rangeController:(ASRangeController *)rangeController willDeleteNodesAtIndexPaths:(NSArray *)indexPaths;
/**
* Called before section insertion.
*/
- (void)rangeController:(ASRangeController *)rangeController willInsertSectionsAtIndexSet:(NSIndexSet *)indexSet;
/**
* Called before section deletion.
*/
- (void)rangeController:(ASRangeController *)rangeController willDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet;
@end @end

View File

@@ -213,18 +213,12 @@
#pragma mark - ASDataControllerDelegete #pragma mark - ASDataControllerDelegete
/** - (void)dataController:(ASDataController *)dataController willInsertNodes:(NSArray *)nodes atIndexPaths:(NSArray *)indexPaths {
* Dispatch to main thread for updating ranges. ASDisplayNodePerformBlockOnMainThread(^{
* We are considering to move it to background queue if we could call recursive display in background thread. if ([_delegate respondsToSelector:@selector(rangeController:willInsertNodesAtIndexPaths:)]) {
*/ [_delegate rangeController:self willInsertNodesAtIndexPaths:indexPaths];
- (void)updateOnMainThreadWithBlock:(dispatch_block_t)block { }
if ([NSThread isMainThread]) { });
block();
} else {
dispatch_async(dispatch_get_main_queue(), ^{
block();
});
}
} }
- (void)dataController:(ASDataController *)dataController didInsertNodes:(NSArray *)nodes atIndexPaths:(NSArray *)indexPaths { - (void)dataController:(ASDataController *)dataController didInsertNodes:(NSArray *)nodes atIndexPaths:(NSArray *)indexPaths {
@@ -235,19 +229,35 @@
[nodeSizes addObject:[NSValue valueWithCGSize:node.calculatedSize]]; [nodeSizes addObject:[NSValue valueWithCGSize:node.calculatedSize]];
}]; }];
[self updateOnMainThreadWithBlock:^{ ASDisplayNodePerformBlockOnMainThread(^{
[_layoutController insertNodesAtIndexPaths:indexPaths withSizes:nodeSizes]; [_layoutController insertNodesAtIndexPaths:indexPaths withSizes:nodeSizes];
[_delegate rangeController:self didInsertNodesAtIndexPaths:indexPaths]; [_delegate rangeController:self didInsertNodesAtIndexPaths:indexPaths];
_workingRangeIsValid = NO; _workingRangeIsValid = NO;
}]; });
}
- (void)dataController:(ASDataController *)dataController willDeleteNodesAtIndexPaths:(NSArray *)indexPaths {
ASDisplayNodePerformBlockOnMainThread(^{
if ([_delegate respondsToSelector:@selector(rangeController:willDeleteNodesAtIndexPaths:)]) {
[_delegate rangeController:self didDeleteNodesAtIndexPaths:indexPaths];
}
});
} }
- (void)dataController:(ASDataController *)dataController didDeleteNodesAtIndexPaths:(NSArray *)indexPaths { - (void)dataController:(ASDataController *)dataController didDeleteNodesAtIndexPaths:(NSArray *)indexPaths {
[self updateOnMainThreadWithBlock:^{ ASDisplayNodePerformBlockOnMainThread(^{
[_layoutController deleteNodesAtIndexPaths:indexPaths]; [_layoutController deleteNodesAtIndexPaths:indexPaths];
[_delegate rangeController:self didDeleteNodesAtIndexPaths:indexPaths]; [_delegate rangeController:self didDeleteNodesAtIndexPaths:indexPaths];
_workingRangeIsValid = NO; _workingRangeIsValid = NO;
}]; });
}
- (void)dataController:(ASDataController *)dataController willInsertSections:(NSArray *)sections atIndexSet:(NSIndexSet *)indexSet {
ASDisplayNodePerformBlockOnMainThread(^{
if ([_delegate respondsToSelector:@selector(rangeController:willInsertSectionsAtIndexSet:)]) {
[_delegate rangeController:self willInsertSectionsAtIndexSet:indexSet];
}
});
} }
- (void)dataController:(ASDataController *)dataController didInsertSections:(NSArray *)sections atIndexSet:(NSIndexSet *)indexSet { - (void)dataController:(ASDataController *)dataController didInsertSections:(NSArray *)sections atIndexSet:(NSIndexSet *)indexSet {
@@ -263,19 +273,27 @@
[sectionNodeSizes addObject:nodeSizes]; [sectionNodeSizes addObject:nodeSizes];
}]; }];
[self updateOnMainThreadWithBlock:^{ ASDisplayNodePerformBlockOnMainThread(^{
[_layoutController insertSections:sectionNodeSizes atIndexSet:indexSet]; [_layoutController insertSections:sectionNodeSizes atIndexSet:indexSet];
[_delegate rangeController:self didInsertSectionsAtIndexSet:indexSet]; [_delegate rangeController:self didInsertSectionsAtIndexSet:indexSet];
_workingRangeIsValid = NO; _workingRangeIsValid = NO;
}]; });
}
- (void)dataController:(ASDataController *)dataController willDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet {
ASDisplayNodePerformBlockOnMainThread(^{
if ([_delegate respondsToSelector:@selector(rangeController:willDeleteSectionsAtIndexSet:)]) {
[_delegate rangeController:self didDeleteSectionsAtIndexSet:indexSet];
}
});
} }
- (void)dataController:(ASDataController *)dataController didDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet { - (void)dataController:(ASDataController *)dataController didDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet {
[self updateOnMainThreadWithBlock:^{ ASDisplayNodePerformBlockOnMainThread(^{
[_layoutController deleteSectionsAtIndexSet:indexSet]; [_layoutController deleteSectionsAtIndexSet:indexSet];
[_delegate rangeController:self didDeleteSectionsAtIndexSet:indexSet]; [_delegate rangeController:self didDeleteSectionsAtIndexSet:indexSet];
_workingRangeIsValid = NO; _workingRangeIsValid = NO;
}]; });
} }
@end @end