• 新人补钙系列教程之:回调函数


    flash 程序执行是个异步单线程机制,当我们需要让程序等待一会,比如加载资源时要侦听complete,否则容易出现null的情况,由于没有c#中的wait,当遇到需要异步的时候,除了使用事件以外,回调函数也是个不错的选择。


    看一段代码:

    1. private function initData ():void {
    2.                 
    3.                         
    4.                         var initNeedData:InitNeedData = new InitNeedData();
    5.                 
    6.                         GetNeedImage.getInstance().getNeedImage("//192.168.168.168\Images\8080\command\jobs\123456789.png",getImageComplete );
    7.                         
    8.                 }
    9.                 private function getImageComplete( bit:Bitmap ):void{
    10.                         
    11.                         var tempBitmap:Bitmap = bit;                        
    12.                         this.addChild( tempBitmap );
    13.                 }
    复制代码




    再看一段代码:


    1.         public function getNeedImage ( imageSource:String,func:Function ):Bitmap {               
    2.                 
    3.                         var crtBitmap:Bitmap;
    4.                         
    5.                         var rc:Resources = new Resources();
    6.                         rc.addEventListener(loadPicOver,loadOverHandler);
    7.                         rc.getResources( imageSource );
    8.                                 
    9.                         function loadOverHandler( event:AssetsEvent ):void{
    10.                                 
    11.                                 var target:Sprite = (event.target) as Sprite;
    12.                                 crtBitmap = event.myEventData as Bitmap;
    13.                                                                         
    14.                                 if ( crtBitmap == null ){
    15.                                         
    16.                                         crtBitmap = new Bitmap( );
    17.                                         
    18.                                         var basicPlane:BasicPlane = new BasicPlane( 222,310,String(1614),114,"1");
    19.                                         var tmpBitmapData:BitmapData = new BitmapData( 222,310 );
    20.                                         
    21.                                         tmpBitmapData.draw( basicPlane );
    22.                                         crtBitmap.bitmapData = tmpBitmapData;
    23.                                 }
    24.                                 target.removeEventListener(loadPicOver,loadOverHandler);
    25.                                 target=null;
    26.                                 func(crtBitmap);
    27.                                 
    28.                         }
    29.                         
    30.                         return crtBitmap;
    31.                 }
    复制代码






    在以上使用了getImageComplete 这么个回调函数。
    那么回调函数实现的原理是什么呢?


    使用回调函数实际上就是在调用某个函数时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数。而那个函数在需要的时候,利用传递的地址调用回调函数,这时你可以利用这个机会在回调函数中处理消息或完成一定的操作。来自互联网


    好了有些抽象吧,其实回调函数的精髓就是:回调函数就是函数引用(指针)的一种用法


    综上所述在代码中


    GetNeedImage.getInstance().getNeedImage("//192.168.168.168\Images\8080\command\jobs\123456789.png",getImageComplete );


    getNeedImage 便持有了getImageComplete 函数的引用(指针),并将其以参数的形式传到getNeedImage这个函数方法自身中,而func(crtBitmap)实际上持有的就是getImageComplete( bit:Bitmap )的引用,简单点就是 他们俩就是一个人,func(crtBitmap)的执行也就是等于执行了

    1. private function getImageComplete( crtBitmap):void{
    2.                         
    3.                         var tempBitmap:Bitmap = crtBitmap;                        
    4.                         this.addChild( tempBitmap );
    5.                 }
    复制代码
  • 相关阅读:
    ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍) 【转】
    一个建议,看看大家的意见。
    发现不错的文章,推!
    有个小问题,大家一起研究。
    逼不得已,这个我确实不会,昨办?
    MSN Message6.2 的小BUG
    在IE7浏览器中切换成以资源管理器方式
    手机罗盘(指南针)校准方法
    G13/ Wildfire S/A510e link2SD教程,干净清洁的安装程序到内存卡
    HTC G13电池怎么鉴别真伪
  • 原文地址:https://www.cnblogs.com/keng333/p/3170236.html
Copyright © 2020-2023  润新知