Skip to content

Commit 2292d7d

Browse files
authored
Merge pull request #3446 from zilongshanren/fix-imageview-memory-leaks
fix imageview possible memory leaks
2 parents 372ea5a + d34f09e commit 2292d7d

File tree

2 files changed

+29
-15
lines changed

2 files changed

+29
-15
lines changed

extensions/ccui/base-classes/UIScale9Sprite.js

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
/* global ccui */
2+
13
/****************************************************************************
24
Copyright (c) 2008-2010 Ricardo Quesada
35
Copyright (c) 2011-2012 cocos2d-x.org
@@ -367,6 +369,7 @@ ccui.Scale9Sprite = cc.Scale9Sprite = cc.Node.extend(/** @lends ccui.Scale9Sprit
367369
_uvsDirty: true,
368370
_isTriangle: false,
369371
_isTrimmedContentSize: false,
372+
_textureLoaded: false,
370373

371374
//v3.3
372375
_flippedX: false,
@@ -414,6 +417,10 @@ ccui.Scale9Sprite = cc.Scale9Sprite = cc.Node.extend(/** @lends ccui.Scale9Sprit
414417
}
415418
},
416419

420+
textureLoaded: function () {
421+
return this._textureLoaded;
422+
},
423+
417424
getCapInsets: function () {
418425
return cc.rect(this._capInsetsInternal);
419426
},
@@ -477,6 +484,7 @@ ccui.Scale9Sprite = cc.Scale9Sprite = cc.Node.extend(/** @lends ccui.Scale9Sprit
477484
}
478485

479486
var locLoaded = texture.isLoaded();
487+
this._textureLoaded = locLoaded;
480488
this._loader.clear();
481489
if (!locLoaded) {
482490
this._loader.once(texture, function () {
@@ -608,10 +616,12 @@ ccui.Scale9Sprite = cc.Scale9Sprite = cc.Node.extend(/** @lends ccui.Scale9Sprit
608616
if (cc.sizeEqualToSize(self._contentSize, cc.size(0, 0))) {
609617
self.setContentSize(self._spriteFrame._rect);
610618
}
619+
self._textureLoaded = true;
611620
self._renderCmd.setDirtyFlag(cc.Node._dirtyFlags.contentDirty);
612621
cc.renderer.childrenOrderDirty = true;
613622
};
614-
if (spriteFrame.textureLoaded()) {
623+
self._textureLoaded = spriteFrame.textureLoaded();
624+
if (self._textureLoaded) {
615625
onResourceDataLoaded();
616626
} else {
617627
this._loader.clear();

extensions/ccui/uiwidgets/UIImageView.js

+18-14
Original file line numberDiff line numberDiff line change
@@ -83,20 +83,6 @@ ccui.ImageView = ccui.Widget.extend(/** @lends ccui.ImageView# */{
8383
this._imageTexType = texType;
8484
var imageRenderer = self._imageRenderer;
8585

86-
if(!imageRenderer._textureLoaded){
87-
imageRenderer.addEventListener("load", function(){
88-
if(!self._ignoreSize && cc.sizeEqualToSize(self._customSize, cc.size(0, 0))) {
89-
self._customSize = self._imageRenderer.getContentSize();
90-
}
91-
92-
self._imageTextureSize = imageRenderer.getContentSize();
93-
94-
self._updateChildrenDisplayedRGBA();
95-
96-
self._updateContentSizeWithTextureSize(self._imageTextureSize);
97-
});
98-
}
99-
10086
switch (self._imageTexType) {
10187
case ccui.Widget.LOCAL_TEXTURE:
10288
if(self._scale9Enabled){
@@ -120,6 +106,24 @@ ccui.ImageView = ccui.Widget.extend(/** @lends ccui.ImageView# */{
120106
break;
121107
}
122108

109+
if(!imageRenderer._textureLoaded){
110+
var handleTextureLoadedEvent = function(){
111+
imageRenderer.removeEventListener("load", handleTextureLoadedEvent);
112+
113+
if(!self._ignoreSize && cc.sizeEqualToSize(self._customSize, cc.size(0, 0))) {
114+
self._customSize = self._imageRenderer.getContentSize();
115+
}
116+
117+
self._imageTextureSize = imageRenderer.getContentSize();
118+
119+
self._updateChildrenDisplayedRGBA();
120+
121+
self._updateContentSizeWithTextureSize(self._imageTextureSize);
122+
};
123+
124+
imageRenderer.addEventListener("load", handleTextureLoadedEvent);
125+
}
126+
123127
if(!this._ignoreSize && cc.sizeEqualToSize(this._customSize, cc.size(0, 0))) {
124128
this._customSize = this._imageRenderer.getContentSize();
125129
}

0 commit comments

Comments
 (0)