zoukankan      html  css  js  c++  java
  • 新人补钙系列教程之:回调函数

    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.                 }
    复制代码
  • 相关阅读:
    使用者自订控件 / User Control
    File 与 Log #1ASP.NET的档案与I/O Stream(为系统记录Log文件)
    JavaScript + ASP.NET
    [VB][ASP.NET]FileUpload控件「批次上传 / 多档案同时上传」的范例
    Android开发之道(4)程序框架基础
    虚拟机网络设置
    POST 模拟登陆
    android 面试二
    SSCANF 正则表达式
    android 之 @ 与? 的区别
  • 原文地址:https://www.cnblogs.com/keng333/p/3170236.html
Copyright © 2011-2022 走看看