Block 三个注意事项

来源:互联网 发布:淘宝网店怎么过户 编辑:程序博客网 时间:2024/04/30 07:04

1. 如何修改外部block的外部变量:加上__block

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

    @autoreleasepool {

        __block int  a =100;

        

        void (^block)() = ^{

            a = 10;

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

        };

        block();

    }

    return 0;

}



2.block作为参数被传递时,block不能为空,要对block做为空判断

#import <Foundation/Foundation.h>


void goToWork(void (^work)())

{

    NSLog(@"刷牙洗脸吃饭");

    work();  //这里会报错,EXC_BAD_ACCESS

    NSLog(@"下班回家睡觉");

}


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

    @autoreleasepool {

        

//        goToWork(^{

//            NSLog(@"上班");

//        });

        goToWork(nil);

    }

    return 0;

}


加上判断即可:

void goToWork(void (^work)())

{

    NSLog(@"刷牙洗脸吃饭");

    if (work != nil)

    {

        work();

    }

    NSLog(@"下班回家睡觉");

}


3.避免循环引用
__weak typeof(self) weakSelf = self;



0 0