Avoid wrapping every UIManager block in another block

Reviewed By: majak

Differential Revision: D3555003

fbshipit-source-id: e7fd5373d002e98bdeb566deaca4345de56c3414
This commit is contained in:
Pieter De Baets 2016-07-14 03:19:55 -07:00 committed by Facebook Github Bot 5
parent 8d24cb4677
commit b9f391d616
1 changed files with 5 additions and 13 deletions

View File

@ -206,7 +206,7 @@ static UIViewAnimationOptions UIViewAnimationOptionsFromRCTAnimationType(RCTAnim
{ {
// Root views are only mutated on the shadow queue // Root views are only mutated on the shadow queue
NSMutableSet<NSNumber *> *_rootViewTags; NSMutableSet<NSNumber *> *_rootViewTags;
NSMutableArray<dispatch_block_t> *_pendingUIBlocks; NSMutableArray<RCTViewManagerUIBlock> *_pendingUIBlocks;
// Animation // Animation
RCTLayoutAnimation *_layoutAnimation; // Main thread only RCTLayoutAnimation *_layoutAnimation; // Main thread only
@ -512,15 +512,7 @@ dispatch_queue_t RCTGetUIManagerQueue(void)
return; return;
} }
__weak RCTUIManager *weakSelf = self; [_pendingUIBlocks addObject:block];
dispatch_block_t outerBlock = ^{
RCTUIManager *strongSelf = weakSelf;
if (strongSelf && strongSelf->_viewRegistry) {
block(strongSelf, strongSelf->_viewRegistry);
}
};
[_pendingUIBlocks addObject:outerBlock];
} }
- (RCTViewManagerUIBlock)uiBlockWithLayoutUpdateForRootView:(RCTRootShadowView *)rootShadowView - (RCTViewManagerUIBlock)uiBlockWithLayoutUpdateForRootView:(RCTRootShadowView *)rootShadowView
@ -1152,7 +1144,7 @@ RCT_EXPORT_METHOD(dispatchViewManagerCommand:(nonnull NSNumber *)reactTag
// First copy the previous blocks into a temporary variable, then reset the // First copy the previous blocks into a temporary variable, then reset the
// pending blocks to a new array. This guards against mutation while // pending blocks to a new array. This guards against mutation while
// processing the pending blocks in another thread. // processing the pending blocks in another thread.
NSArray<dispatch_block_t> *previousPendingUIBlocks = _pendingUIBlocks; NSArray<RCTViewManagerUIBlock> *previousPendingUIBlocks = _pendingUIBlocks;
_pendingUIBlocks = [NSMutableArray new]; _pendingUIBlocks = [NSMutableArray new];
if (previousPendingUIBlocks.count) { if (previousPendingUIBlocks.count) {
@ -1162,8 +1154,8 @@ RCT_EXPORT_METHOD(dispatchViewManagerCommand:(nonnull NSNumber *)reactTag
RCTProfileEndFlowEvent(); RCTProfileEndFlowEvent();
RCT_PROFILE_BEGIN_EVENT(RCTProfileTagAlways, @"-[UIManager flushUIBlocks]", nil); RCT_PROFILE_BEGIN_EVENT(RCTProfileTagAlways, @"-[UIManager flushUIBlocks]", nil);
@try { @try {
for (dispatch_block_t block in previousPendingUIBlocks) { for (RCTViewManagerUIBlock block in previousPendingUIBlocks) {
block(); block(self, self->_viewRegistry);
} }
} }
@catch (NSException *exception) { @catch (NSException *exception) {