OC中新增的数据类型

Block

   OC的Block跟C语言的指向函数指针含义相同,只不过使用Block可以更简洁、快速的定义一个指向函数指针。

   语法:

 返回值类型 (^变量名)(参数列表) = ^{//函数体...}

C语言的函数指针

void method()
{
    NSLog(@"C语言的函数");
}
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        void (*myMethod)() = method;//C语言的函数指针以*号作为标识
        myMethod();//调用
    }
    return 0;
}

OC的无参数Block:

//定义一个block数据类型的变量,名字为myBlock。
void (^myBlock)();
    //为变量赋值
myBlock = ^{
   NSLog(@"myBlock代码块。。");
}; //调用 myBlock();

 声明并初始化

void (^myBlock)() = ^(){//括号可以省略 
     NSLog(@"定义了一个block并初始化");
};//数据类型 = 值;
myBlock();//调用

OC的有参数Block:

int (^sumBlock)(int,int) = ^(int a,int b)
{
     return a+b;
};
int sum = sumBlock(10,25);//调用
NSLog(@"sum = %d",sum);

在Block内部修改外部的变量值,需要在变量声明时使用__block修饰。

__block int a = 20;
    void (^myBlock)() = ^{
        a = 30;
    };
    myBlock();
    NSLog(@"a = %d",a);

使用typedef定义block

typedef int(^MyBlock)(int,int); //利用typedef定义block类型。
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
    //创建block类型的变量
    MyBlock add = ^(int a,int b){
        return a + b;
    };
    int sum = add(10,20);
    NSLog(@"sum = %d",sum);
    return 0;
}

 

 

posted @ 2014-04-23 20:33  从良少年  阅读(290)  评论(0编辑  收藏  举报