Laya Handler使用总结

一、回收

1.once参数,默认是自动回收到池子里的。手动回收可以调用recover

/**
 * 从对象池内创建一个Handler,默认会执行一次并立即回收
 *,如果不需要自动回收,设置once参数为false。
 * @param   caller 执行域(this)。
 * @param   method 回调方法。
 * @param   args 携带的参数。
 * @param   once 是否只执行一次,如果为true,回调后执行recover()进行回收,默认为true。
 * @return  返回创建的handler实例。
 */
public static function create(caller:*, method:Function, 
args:Array = null, once:Boolean = true):Handler {
    if (_pool.length) return _pool.pop().setTo(caller, method, args, once);
    return new Handler(caller, method, args, once);
}

/**
 * 清理并回收到 Handler 对象池内。
 */
public function recover():void {
    if (_id > 0) {
        _id = 0;
        _pool.push(clear());
    }
}

//手动回收示例,要先recover再置为null
if (allCompHandler) {
    allCompHandler.recover();
    allCompHandler = null;
}

注意:打开面板时,如果传入的参数内有Handler,需要在关闭时清理。否则下次再打开面板,会重新传入新的参数,之前参数的Handler就找不到了……

2.Handler的caller出现错误
这种情况一般是handler被回收了,但又去使用它。可是它已经在池子里被重新分配给别的类去使用了,就导致在debug面板中,看到caller变成别的类对象了。一般是先去检查once参数设置和有没有主动调用recover方法。如果没有,再去考虑整个类对象是否存在内存泄露,导致非正常回收。

二、作用域

node.on(Event.CLICK, null, resizeHandler, [node]);
注意作用域为null时resizeHandler方法取不到本类中的变量

三、参数叠加

如果一个动画播放过程中抛的事件带参数,那我们额外追加的参数要放在其前面
1.不带额外参数:

Handler.create(this, eventHandler)
private function eventHandler(event : String) : void {
trace("event",event);
}

2.带额外参数:

Handler.create(this, eventHandler,["test"])
private function eventHandler(test:String,event : String) : void {
trace("event",event,"test",test);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容