zoukankan      html  css  js  c++  java
  • Block^

    Block 封装了一段代码,可以在任何时候执行

    Block可以作为函数或者函数的返回值,而其本身又可以带输入参数货返回值。它和传统的函数指针很类似,但是有区别:Block是inline(内联函数)的,并且默认情况下他对局部变量是只读的。

    苹果官网建议尽量多用Block。在多线程、异步任务、集合遍历、集合排序、动画转场用的很多。

    外号  代码段


    1.blocks 定义

    int (^MySum)(int,int)=^(int a,int b){

    return a+b;

    }

    定义了一个叫MySum的Block对象,它带有两个int参数,返回int,等式右边就是blocks的具体实现。

    调用Block

    int  a=Sum(10,11);

    2.typedef来定义

    typedef int (^MySum)(int,int);

    void test1(){

    MySum sum=^(int a,int b){

    return a+b;

    };

    NSLog(@"%i",sum(10,10));

    }

    block可以访问外面定义的变量

    但是默认情况下block中不能修改

    如果要修改就加___block关键字。两个下划线,注意。

    typedef int (^MySum)(int,int);

    void test1(){

    MySum sum=^(int a,int b){

    return a+b;

    };

    NSLog(@"%i",sum(10,10));

    }


    typedef int (^MySum)(int,int);

    void test1(){

    __block int c=15;

    MySum sum=^(int a,int b){

    return a+b;

    c=19;

    };

    NSLog(@"%i",sum(10,10));

    }


    建立Button class,使用block做监听器--------------------->回调

    Button.h

    @class Button;

    typedef void (^ButtonBlock) (Button *btn);

    @property (nonatomic,assign) ButtonBlock block;

    //mimic button is clicked;

    -(void)click{

    _block(self);

    }

    Button.m

     

    main.m

    Button *btn=[[[Button]init]autorelease];

    //btn.listener=^(Button *btn){

    //NSLog(@"button-%@ is clicked",btn);

    //};

    btn.block=^(Butten *btn){

    NSLog(@"Button -%@ is clicked,",btn);

    };

    [btn click];


  • 相关阅读:
    Silverlight 页面导航
    SqlServer中的扩展属性[转]
    一个你不一定知道的CMD命令: start
    手动将Notepad2加入到右键
    ExcelHelper:使用Oledb接口操作Excel的帮助类[原]
    Excel学习笔记 – 区域选择
    SqlMetal自动代码生成
    与System.Diagnostics.Process相关的几个方法
    在Sql Server中附加数据库文件时寻找日志文件的规则
    获取SQL SERVER服务状态及启用的协议
  • 原文地址:https://www.cnblogs.com/yesihoang/p/4497892.html
Copyright © 2011-2022 走看看