iOS开发知识小集iOS 面试题系列OC底层相关

Block注意事项

2019-02-23  本文已影响20人  越天高

1.Block注意事项

int  a = 10;
void (^myBlock)() = ^{
    NSLog(@"a = %i", a);
    }
myBlock();
输出结果: 10
int  a = 10;
void (^myBlock)() = ^{
    int a = 50;
    NSLog(@"a = %i", a);
    }
myBlock();
输出结果: 50
int b = 5;
void (^myBlock)() = ^{
    b = 20; // 报错
    NSLog(@"b = %i", b);
    };
myBlock();
__block int b = 5;
void (^myBlock)() = ^{
  b = 20;
  NSLog(@"b = %i", b);
  };
myBlock();
输出结果: 20
     int a = 10;
     void (^myBlock)() = ^{
           a = 10;
       NSLog(@"a = %i", a);
     };
      myBlock();
  int a = 10; // 如果没有添加__block是值传递
  void (*myBlock)() = &__main_block_impl_0( __main_block_func_0, &__main_block_desc_0_DATA, a);
   (myBlock)->FuncPtr)(myBlock);
    a =  10; // 如果加上__block之后就是地址传递, 所以可以在block中修改外界变量的值
    void (*myBlock)() = &__main_block_impl_0(__main_block_func_0, &__main_block_desc_0_DATA, &a, 570425344);
      __block int a = 10;
    void (^myBlock)() = ^{
            a = 10;
            NSLog(@"a = %i", a);
        };
     myBlock();

block是存储在堆中还是栈中

    Person *p = [[Person alloc] init];
    __weak Person *weakP = p;
上一篇 下一篇

猜你喜欢

热点阅读