iOS之——Block

神一样的存在

iOS之——Block_第1张图片
网上资源

iOS开发中copy、retain的定义和区别

  1. Block 为什么使用copy
  • Block在创建的时候默认分配的内存在栈上,而不是在堆上。使用copy将其拷贝到堆上,防止在创建的作用域之外使用崩溃。
  • Block 创建在栈上,而Block的代码中可能会用到本地的一些变量,只有将其拷贝到堆上才能使用这些变量。
  1. Block 为什么不适用retain
    retain使用引用计数增加1,Block的内存在栈上,不是堆上,可能随时被系统回收,导致野指针存在,程序崩溃。
  2. 为什么Block中的对象引用计数需要自动加1
    Block执行的是回调,因此Block并不知道其中的对象obj创建后会在什么时候释放,为了不再Block使用object之前,对象已经释放,Block就retain了object一次,持有这个对象。
  3. Block和函数的关系
  4. Block的理解
    Block实际上是:指向结构体的指针
  5. 对于基本数据
    //如果需要在block中对num进行修改,需要加上关键字__block
    //(我们也可以用static关键字进行修饰)
    int num1 = 10;
    void(^block1)() = ^{
        NSLog(@"num1 is %d",num1);
    };
    num1 = 20;
    block1();//输出10
    
    //改进:使用block,使进入到block块中的变量不被当做常量来使用
    __blockint num2 = 10;
    void(^block2)() = ^{
        NSLog(@"num2 is %d",num2);
    };
    num2 = 20;
    block2();//输出20

你可能感兴趣的:(iOS之——Block)