美文网首页
Block 拷贝或者捕获的是指针指向的内存地址,还是指针地址

Block 拷贝或者捕获的是指针指向的内存地址,还是指针地址

作者: 柠檬草YF | 来源:发表于2018-01-27 11:19 被阅读65次

让我们通过例子来验证一下我们的猜想。
猜想例子方案:

block 先捕获指针,在给指针赋值,然后调用block,在block 打印指针的值

可能的两个结论
结论1:打印出 block捕获前指针的值
结论2:打印出 block捕获后指针的值

  NSMutableArray *array = nil;;
  void(^block)(void) = ^{
      NSLog(@"%@",array);
  };
  array = @[@"1",@"2",@"3"].mutableCopy;
  block();

打印结果:== 结论1

(null)
 NSMutableArray *array = @[@"1",@"2",@"3"].mutableCopy;
 void(^block)(void) = ^{
     NSLog(@"%@",array);
 };
  block();

打印结果:== 结论1

(
    1,
    2,
    3
)

由此可见,block 捕获的是 block 实现时指针指向的内存地址,实现block 之后的指针指向别的内存地址,block 都不会改变,

结论: block 捕获的是指针指向的内存地址

那么有没有办法让block 捕获指针的地址呢,不管指针什么时候指向什么内存,我block都需要得到这个指针指向的内存地址???
binggo,没有我说个锤子!!!!

__block 的应用

 __block NSMutableArray *array = nil;
 void(^block)(void) = ^{
      NSLog(@"%@",array);
 };
 array = @[@"1",@"2",@"3"].mutableCopy;
 block();

打印结果:==结论2

(
    1,
    2,
    3
)

加上 __block 修饰符 之后,就达到了我们的目的了,哈哈,是不是很神奇

相关文章

  • Block 拷贝或者捕获的是指针指向的内存地址,还是指针地址

    让我们通过例子来验证一下我们的猜想。猜想例子方案: block 先捕获指针,在给指针赋值,然后调用block,在b...

  • iOS 深浅拷贝汇总

    概念: 浅拷贝是指针拷贝,新指针和旧指针指向同一块地址。 深拷贝将对象也进拷贝了一份到新的内存地址,新指针指向了新...

  • iOS 关于容器类的浅、深拷贝探究

    引子 浅拷贝:指针拷贝,引用拷贝,指向同一内存地址 深拷贝:内容拷贝,指向不同内存地址,但是内容相同 容器类拷贝的...

  • iOS的深浅拷贝

    浅拷贝:指针拷贝,引用拷贝,指向同一内存地址深拷贝:内容拷贝,指向不同内存地址,但内容相同 1、copy和muta...

  • __block 到底能不能防止循环引用呢

    如果不熟悉__block 和 block的应用和混合使用的请先移步上篇文章Block 拷贝或者捕获的是指针指向的内...

  • iOS 深拷贝与浅拷贝的理解

    浅拷贝:拷贝对象本身,返回一个对象指针,指向相同的内存地址。 深拷贝:拷贝内容本身,返回一个对象指针,指向不同的内...

  • 熟知浅拷贝与深拷贝,copy和mutableCopy

    一、深拷贝和浅拷贝 1.浅拷贝:也可以叫影子拷贝或者指针拷贝,浅拷贝就是对内存地址的复制,会生成一个新的指针指向这...

  • 深拷贝 浅拷贝研究

    最近工作事情不多,研究哈深拷贝,浅拷贝。浅拷贝:浅拷贝是对object对象的指针拷贝,让指针指向同一块内存地址,“...

  • 空指针与野指针

    注意空指针和野指针的区别:空指针是指向null的指针,没有指任何内存地址。而野指针是,指向了一块内存地址,但是这块...

  • copy和mutableCopy

    概念 浅拷贝:指针拷贝,不会创建一个新的对象。浅拷贝简单点说就是对内存地址的复制,让目标对象指针和源对象指针指向同...

网友评论

      本文标题:Block 拷贝或者捕获的是指针指向的内存地址,还是指针地址

      本文链接:https://www.haomeiwen.com/subject/idhnaxtx.html