ios开发专题

block基础-1

2018-07-04  本文已影响0人  zl520k

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对象。

上一篇 下一篇

猜你喜欢

热点阅读