動態加載資源 釋放時要注意 引入引用計數統計
今天開發時,釋放了預制體資源引起報錯,這里直接使用了bundle.release
因為預制體的精靈圖片是動態加載的,釋放時將精靈圖片一并釋放了,引起錯誤
改為引用計數,解決問題
cocos資源釋放文檔:https://docs.cocos.com/creator/manual/zh/asset/release-manager.html
資源的動態引用
資源的動態引用 當開發者在編輯器中沒有對資源做任何設置,而是通過代碼動態加載資源并設置到場景的組件上,則資源的引用關系不會記錄在序列化數據中,引擎無法統計到這部分的引用關系,這些引用關系就是動態引用。 如果開發者在項目中使用動態加載資源來進行動態引用,例如: resources.load('images/background/spriteFrame', SpriteFrame, function (err, spriteFrame) { self.getComponent(Sprite).spriteFrame = spriteFrame; }); 此時會將 SpriteFrame 資源設置到 Sprite 組件上,引擎不會做特殊處理,SpriteFrame 的引用計數仍保持 0。如果動態加載出來的資源需要長期引用、持有,或者復用時,建議使用 addRef 接口手動增加引用計數。例如: resources.load('images/background/spriteFrame', SpriteFrame, function (err, spriteFrame) { self.getComponent(Sprite).spriteFrame = spriteFrame; spriteFrame.addRef(); }); 增加引用計數后,可以保證該資源不會被提前錯誤釋放。而在不需要引用該資源以及相關組件,或者節點銷毀時,請 務必記住 使用 decRef 移除引用計數,并將資源引用設為 null,例如: this.spriteFrame.decRef(); this.spriteFrame = null;

浙公網安備 33010602011771號