You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by cx...@apache.org on 2018/06/19 09:41:15 UTC

[28/50] [abbrv] incubator-weex git commit: [WEEX-456][ios]try to fix bas_access of parentNode

[WEEX-456][ios]try to fix bas_access of parentNode


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/a13225f6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/a13225f6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/a13225f6

Branch: refs/heads/release
Commit: a13225f60817be2ae40391f2606fdc4850df29c3
Parents: eeb9170
Author: zhongcang <qh...@gmail.com>
Authored: Wed Jun 13 15:35:08 2018 +0800
Committer: Adam Feng <cx...@gmail.com>
Committed: Thu Jun 14 10:35:47 2018 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Layout/WXCoreLayout.h    |  3 ++-
 .../Sources/Manager/WXComponentManager.mm        | 19 ++++++++++++++++++-
 ios/sdk/WeexSDK/Sources/Model/WXComponent.mm     |  7 +++----
 3 files changed, 23 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a13225f6/ios/sdk/WeexSDK/Sources/Layout/WXCoreLayout.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Layout/WXCoreLayout.h b/ios/sdk/WeexSDK/Sources/Layout/WXCoreLayout.h
index 216c099..e1827c5 100644
--- a/ios/sdk/WeexSDK/Sources/Layout/WXCoreLayout.h
+++ b/ios/sdk/WeexSDK/Sources/Layout/WXCoreLayout.h
@@ -703,9 +703,10 @@ namespace WeexCore {
       return mChildList.cend();
     }
 
-    inline void removeChild(const WXCoreLayoutNode* const child) {
+    inline void removeChild(WXCoreLayoutNode* const child) {
       for (int index = 0; index < mChildList.size(); index++) {
         if (child == mChildList[index]) {
+          child->mParent = nullptr;
           mChildList.erase(mChildList.begin() + index);
           break;
         }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a13225f6/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.mm
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.mm b/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.mm
index ed3e9f0..3fa3f33 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.mm
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.mm
@@ -986,9 +986,26 @@ static NSThread *WXComponentThread;
 - (void)removeFixedComponent:(WXComponent *)fixComponent
 {
     [_fixedComponents removeObject:fixComponent];
-        _rootFlexCSSNode->removeChild(fixComponent->_flexCssNode);
+    [self removeFixFlexNode:fixComponent->_flexCssNode];
 }
 
+- (void)removeFixFlexNode:(WeexCore::WXCoreLayoutNode* )fixNode{
+    if (nullptr == fixNode) {
+        return;
+    }
+    if ([[NSThread currentThread].name isEqualToString:WX_COMPONENT_THREAD_NAME]) {
+        _rootFlexCSSNode->removeChild(fixNode);
+    }else{
+        WXPerformBlockOnComponentThread(^{
+            if (nullptr == fixNode) {
+                return;
+            }
+            _rootFlexCSSNode->removeChild(fixNode);
+        });
+    }
+}
+
+
 @end
 
 void WXPerformBlockOnComponentThread(void (^block)(void))

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a13225f6/ios/sdk/WeexSDK/Sources/Model/WXComponent.mm
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXComponent.mm b/ios/sdk/WeexSDK/Sources/Model/WXComponent.mm
index f383ad8..58df862 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXComponent.mm
+++ b/ios/sdk/WeexSDK/Sources/Model/WXComponent.mm
@@ -222,6 +222,9 @@ static BOOL bNeedRemoveEvents = YES;
 
 - (void)dealloc
 {
+    if (_positionType == WXPositionTypeFixed) {
+        [self.weexInstance.componentManager removeFixedComponent:self];
+    }
     if(_flexCssNode){
 #ifdef DEBUG
         WXLogDebug(@"flexLayout -> dealloc %@",self.ref);
@@ -257,10 +260,6 @@ static BOOL bNeedRemoveEvents = YES;
         }
     }
 
-    if (_positionType == WXPositionTypeFixed) {
-        [self.weexInstance.componentManager removeFixedComponent:self];
-    }
-
     pthread_mutex_destroy(&_propertyMutex);
     pthread_mutexattr_destroy(&_propertMutexAttr);