喜糖

移动开发工程师 。涉及 android、ios、jni

导航

IOS学习之路--BLOCK

Posted on 2014-07-10 15:23  喜糖  阅读(553)  评论(0编辑  收藏  举报
/*
 1.定义block变量:
 返回值类型 (^block变量名) (参数类型1, 参数类型2, ....);
 
 
 2.给block变量赋值
 block变量名 = ^(参数类型1 参数名称1, .....)
 {
    
 };
 */


/*
 1.设置动画属性
 
 2.开始执行动画
 
 3.动画执行完毕
 
 block1 = ^{
    封装了动画开始执行前想做的事情
 };
 
 block2 = ^{
    封装了动画执行完毕后想做的事情
 };
 */

#import <Foundation/Foundation.h>

//typedef int MyInt;

// MyBlock其实就是新的数据类型名称
typedef int (^MyBlock)(int, int);

/*
 需要掌握:
 1.定义block变量
 2.给block变量赋值
 3.type和block的应用
 */

int main(int argc, const char * argv[])
{
    MyBlock minus = ^(int a, int b)
    {
        return a - b;
    };
    int d = minus(10,5);NSLog(@"d id %d", d);
    
    
    MyBlock sum = ^(int v1, int v2)
    {
        return v1 + v2;
    };
    
    int e = sum(10, 11);
    NSLog(@"e is %d", e);
    
    
    /*
    int (^minusBlock) (int, int) = ^(int a, int b){
        return a - b;
    };
    minusBlock(10, 5);
    
    
    int (^averageBlock) (int, int) = ^(int a, int b)
    {
        return (a+ b)/2;
    };*/
    
    
    return 0;
}

void test2()
{
    int a = 10;
    
    __block int b = 10;
    
    // block内部不能修改默认的局部变量
    // 定义一个block变量
    void (^block) () = ^{
        //a = 11;
        b = 11;
        NSLog(@"b=%d", b);
    };
    
    block();
    block();
    block();
}

void test()
{
    // 左边的void:block没有返回值
    // 最右边的() :没有参数
    // 中间的(^)  block的标志,不能少
    void (^myblock)()  = ^{
        int a = 11;
        int b = 11;
        NSLog(@"a=%d, b=%d", a, b);
    };
    myblock();
    
    // 定义一个block变量,变量名是sumBlock
    // 最左边的int:block的返回值是int类型
    // 最右边的(int, int) block接受两个int类型的参数
    int (^sumBlock)(int, int);
    sumBlock = ^(int v1, int v2){
        return v1 + v2;
    };
    
    int sum = sumBlock(10, 11);
    NSLog(@"sum=%d", sum);
}