Skip to content

Commit d34f09e

Browse files
committed
fix imageview possible memory leaks
1 parent eb8e61d commit d34f09e

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
@@ -363,6 +365,7 @@ ccui.Scale9Sprite = cc.Scale9Sprite = cc.Node.extend(/** @lends ccui.Scale9Sprit
363365
_uvsDirty: true,
364366
_isTriangle: false,
365367
_isTrimmedContentSize: false,
368+
_textureLoaded: false,
366369

367370
//v3.3
368371
_flippedX: false,
@@ -410,6 +413,10 @@ ccui.Scale9Sprite = cc.Scale9Sprite = cc.Node.extend(/** @lends ccui.Scale9Sprit
410413
}
411414
},
412415

416+
textureLoaded: function () {
417+
return this._textureLoaded;
418+
},
419+
413420
getCapInsets: function () {
414421
return cc.rect(this._capInsetsInternal);
415422
},
@@ -473,6 +480,7 @@ ccui.Scale9Sprite = cc.Scale9Sprite = cc.Node.extend(/** @lends ccui.Scale9Sprit
473480
}
474481

475482
var locLoaded = texture.isLoaded();
483+
this._textureLoaded = locLoaded;
476484
this._loader.clear();
477485
if (!locLoaded) {
478486
this._loader.once(texture, function () {
@@ -604,10 +612,12 @@ ccui.Scale9Sprite = cc.Scale9Sprite = cc.Node.extend(/** @lends ccui.Scale9Sprit
604612
if (cc.sizeEqualToSize(self._contentSize, cc.size(0, 0))) {
605613
self.setContentSize(self._spriteFrame._rect);
606614
}
615+
self._textureLoaded = true;
607616
self._renderCmd.setDirtyFlag(cc.Node._dirtyFlags.contentDirty);
608617
cc.renderer.childrenOrderDirty = true;
609618
};
610-
if (spriteFrame.textureLoaded()) {
619+
self._textureLoaded = spriteFrame.textureLoaded();
620+
if (self._textureLoaded) {
611621
onResourceDataLoaded();
612622
} else {
613623
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)