Block的注意点

来源:互联网 发布:lns是什么社交软件 编辑:程序博客网 时间:2024/04/19 13:47
////  main.m//  OC语言学习#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {       //1.block中可以访问外面的变量    int a = 10;    void (^myBlock)() = ^{        NSLog(@"a = %i",a);    };    myBlock(); //输出: a = 10        //2.block中可以定义和外界同名的变量    int a1 = 10;    void (^myBlock1)() = ^{        int a1 = 20;        NSLog(@"a1 = %i",a1);    };    myBlock1(); //输出:a1 = 20        //3.默认情况下,不可以在block中修改外界变量的值    int a2 = 10;    void (^myBlock2)() = ^{        NSLog(@"a2 = %i",a2);    };    a2 = 20;    myBlock2(); //输出: a2 = 10        //3.1在block中修改外面变量的值   __block int a3 = 10;    void (^myBlock3)() = ^{        a3 = 50;        NSLog(@"a3 = %i",a3);    };    myBlock3(); //输出:a3 = 50        //4.block是存储在堆中还是栈中?        /*     默认情况下,block存储在栈中,如果对block进行一个copy操作,block会转移到堆中     如果block在栈中,block中访问了外界的对象,那么不会对对象进行retain操作     但是如果block在堆中,block中访问了外界的对象,那么会对外界的对象进行一次retain     */        //所以,如果在block中访问了外界的对象,一定要给对象加上 __block,只要加上 __block,    //即使block存储在堆中,也不会对外界的对象进行retain        return 0;}

0 0