您知道Objective-C中一个很重要的数据类型Block的基本用法吗?

你知道Objective-C中一个很重要的数据类型Block的基本用法吗???

您知道Objective-C中一个很重要的数据类型Block的基本用法吗?

  Block是OC的一个数据类型,是苹果官方特别推荐使用的一种类型,因为她效率高,在iOS开发中会发现到处都是Block的踪影。苹果官方建议尽量多用Block。

一,Objective-C关于Working With Blocks的地址和一位哥们的翻译地址

1.英文文档档:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/ProgrammingWithObjectiveC.pdf

2.翻译:http://www.cnblogs.com/qiqibo/p/3429913.html

二,关于block的简介

1.Block的作用是封装代码,就是用来保存代码的,这段代码你想在什么时候调用都可以,即可以在任何时候执行。

2.Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。

3.在多线程,异步任务,集合遍历,集合排序,动画转场用的很多。

三,自己写的一点基础玩意~

您知道Objective-C中一个很重要的数据类型Block的基本用法吗?
#import<Foundation/foundation.h>
int mian()
{
        //block用来保存一段代码
        //block的标志:^
        /*
         block跟函数很像:
         1.可以保存代码
         2.有返回值
         3.有形参
         4.调用方式一样
        */
        //定义block变量
        //如果block没有形参,可以省略^后面的小括号
        void (^myblock )( ) = ^{
            NSLog(@"-----------------");
            NSLog(@"-----------------");
        };
int (^sumblock)(int,int) = ^(int a,int b){
        return a+b;
}:
int c = sumblock(10,11);
        // 利用block变量调用block内部的代码
        return 0;
}


//用一个block输出n条横线
void (^LineBlock)(int) = (int n)
{
        for (int i = 0; i<n;i++){
            NSLog(@"------------------");
        }
};
LineBlock(5);

//使用typedef定义block类型
typedef int (*Sump)(int, int);
typedef int (^MyBlock)(int,int);
MyBlock sumBlock;
sumBlock = ^(int a,int b){
    return a + b;
}:
MuBlock minusBlock = ^(int a,int b){
    return a - b;
};
MyBlock multiplyBlock = ^(int a; int b)
{
    return a * b;
};
NSLog (@"%d-%d-%d,"multiplyBlock(  2, 4 ),sumBlock( 10, 9 ),minusBlock(10 , 8));


    int a = 10;
    __block int b = 20;
    void (^block)();
    block = ^{
        //block内部可以访问外面的变量
        //NSLog(@"a = %d",a);
        //默认情况下,block内部不能修改外面的局部变量
        //a = 20
        //给局部变量加上__block关键字,这个局部变量可以在block内部修改
        b = 25;
};
block();

return 0;
}
您知道Objective-C中一个很重要的数据类型Block的基本用法吗?

四,总结:block要掌握的东西

1.如何定义block变量

    int(^sumBlock)(int,int);
    void (^myBlock)();

2.如何利用block封装代码

您知道Objective-C中一个很重要的数据类型Block的基本用法吗?
    ^(int a,int b){
        return a - b;
};

    ^(){
        NSLog(@"--------------")
};

    ^{
        NSLog(@"--------------")
}:
您知道Objective-C中一个很重要的数据类型Block的基本用法吗?

3.block访问外面变量
*block内部可以访问外部变量
*默认情况下,block内部不能修改外面的局部变量
*给局部变量加上_­__block关键字,这个局部变量就可以在block内部修改
4.利用typedef定义block类型

typedef int (^MyBlock)(int, int);

  以后就可以利用MyBlock这种类型来定义block变量

您知道Objective-C中一个很重要的数据类型Block的基本用法吗?
MyBlock block;
MyBlock b1, b2;
b1 = ^(int a; int b){
    return a - b;
};

MyBlock b3 = ^(int a, int b){
    return a - b;
};
您知道Objective-C中一个很重要的数据类型Block的基本用法吗?