block基础-1

作者: zl520k | 来源:发表于2018-07-04 09:58 被阅读0次

    block块是在ios4开始,就出现了。block实质就是C语言的回调函数。block函数定义如下

    void (^blockName)(int,int) = ^(int a,int b){};//void->返回值,blockName->block名字,(int,int)->block的参数,void (^blockName)(int,int) ->block声明,

    ^(int a,int b){};->block的定义,返回值和参数类型要一样。block能将代码变的简洁、清晰。block在开发中,当一个对象使用,就可以了。因为block对象的类归根揭底还是NSObject类。

    block在开发当中,大多数都是这样使用的,例如typedef  void(^HttpResponseSuccess)(idresponse,BaseResponeModel*model);。很少在使用的时候,在声明,不使用typedef声明一个block块的。

    在arc情况下,如果定义block为一个对象的时候,属性使用copy,但是使用strong也是一样,因为在arc情况下,copy和strong是一样的,只不过,之前习惯这样写成copy属性。

    void (^blockName)(int,int) = ^(int a,int b){//处理逻辑};

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

        @autoreleasepool {

            void(^block1)(void)= ^(){ };//NSGlobalBlock---是在数据区分配

            int age =10;

            void(^block)(int,int) = ^(inta,intb){

                NSLog(@"%d,%d",a,b);

                NSLog(@"%d",age);

            };//NSMallocBlock--是在堆中分配,因为使用age的变量

            void(^block2)(void) = ^{

                NSLog(@"%d",age);

            } ;

            NSLog(@"%@======%@======%@",[block1 class],[block class],[^{

                NSLog(@"%d",age);

            }class]);//[^{NSLog(@"%d",age);}class]----NSStackBlock-->是在栈中分配

        }    return 0;

    }

    打印:__NSGlobalBlock__======__NSMallocBlock__======__NSStackBlock__

    如果static  int age =10;或extern  int age =10;在block中只要使用age,就是在数据段分配了。__NSGlobalBlock__、__NSMallocBlock__、__NSStackBlock__都是class_t对象。

    相关文章

      网友评论

        本文标题:block基础-1

        本文链接:https://www.haomeiwen.com/subject/eyuayftx.html