首页 > 代码库 > 【OC加强】block数据类型的定义和调用以及传参等应用

【OC加强】block数据类型的定义和调用以及传参等应用

(1)指向函数的指针的定义方法和调用:

#import <Foundation/Foundation.h>

void test(){
    NSLog(@"hello");
}

int main(int argc, const char * argv[]) {

    @autoreleasepool {
        //定义
        void (*p1)()=test;
        //使用
        p1();
    }
    
    return 0;
}

而block的定义与之类似。

    //定义block,注意^以及末尾的分号;右边的函数体也不再需要函数名称,只要前面有myBlock即可
    void (^myBlock)()=^{
        NSLog(@"hello");
    };
    //调用,和函数类似
    myBlock();

block于指向函数的指针的区别在于:后者只能在后面放一个函数名,而不能直接把函数的代码(函数体)整个放在后面。而前者弥补了这个缺陷,相当于把整个代码块“封装”在一起了。


(2)带有参数的block

    //定义block,注意^以及末尾的分号;
    int (^sum1)(int a,int b)=^int (int a,int b){
        return a+b;
    };
    //调用,和函数类似
    NSLog(@"%d",sum1(5,6));

(3)既然是数据类型,它也可以当做参数进行传递。


(4)如果需要在block代码中改变block外的变量,需要在该变量前面添加__block关键字。


【OC加强】block数据类型的定义和调用以及传参等应用