2021-06-07

IOS block 

简单的可以认为是NSObject 对象(superclass:NSBlock)

block就是将一些代码封装起来,以便在将来某个时候被使用,如果你不去调用block,block内部封装的代码就不会执行

block的本质也是一个OC对象,它内部也有个isa指针

block是封装了函数调用和函数调用环境的OC对象

clang 变异main文件 :xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m -o main.cpp


#import


//全局变量直接引用
//  int age = 10;//static int height = 10;

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

    @autoreleasepool {

//捕获Auto变量

        int age = 10;

//Block捕获局部static变量

       static int height = 10;

        //Block的定义

        void (^block)(void) = ^(){

          NSLog(@"Age is %d, height is %d", age, height);

        };

        //先修改age的值

        age = 20;

        //Block的调用

        block();

    }

    return 0;

}

                      如果一个block内部没有使用/访问  自动变量(auto变量),那么它的类型即为__NSGlobalBlock__,它会被存储在应用程序的 数据段

                       如果一个block有使用/访问  自动变量(auto变量),那么它的类型即为__NSStaticBlock__,它会被存储在应用程序的 栈区

                       对__NSMallocBlock__调用copy方法,就可以转变成__NSMallocBlock__,它会被存储在堆区上


  

堆区 block 的引用 (强引用不能正常的释放)

栈区 block 的引用

__block  修饰auto变量让其在block内部可以被修改

你可能感兴趣的:(2021-06-07)