显示对象如果不添加到显示列表里面,下一轮渲染时其所有属性被清除么?!?

新入门,今天遇到了个奇葩的问题,研究了一天才发现了根本原因:

给显示对象自定义属性,在延时(异步渲染?)后,自定义的所有属性都变成了nil

代码如下:


-- 定义一个显示对象
local sp = display.newSprite()
-- 定义异步回调函数
function _callback(  )
    print(sp.name) -- 打印“nil”
end
-- 自定义属性
sp.name = "testSprite"
print(sp.name) -- 打印“testSprite”

local scheduler = require("framework.scheduler")    
scheduler.performWithDelayGlobal(_callback, 1)-- 延时1秒后再取值


以上代码的输出如下:

testSprite
nil

这是一个大坑啊,不知情的情况下查了好久,请问这是cocos2dx为了优化性能而作的处理么?
有人可以阐述一下相关信息或给个链接介绍一下?

被回收了
这是Cocos2dx的内存回收机制。一切不马上添加到显示列表的对象将会在下一帧被回收掉。
如果未加入,又不想销毁。。可以加一句:sp.retain()

后续需要释放sp的时候,用sp.release()