iOS知识收集

iOS中的Block

2016-02-23  本文已影响69人  王蓝胖

Block

使用^来声明一个block变量

void (^printBlock)(NSString *x);
    printBlock =^(NSString *str){
        NSLog(@"print:%@",str);
        };

返回值 ^block名 形参 {块内容}

概述

__block int NBNum = 1;
int notNBNum = 0;

   void (^doSomeThing)(int n);
   doSomeThing = ^(int n){
       NBNum++;
       NSLog(@"%d",NBNum);
       NSLog(@"%d",notNBNum)
   };

功能

Block是一种具有匿名功能的内嵌函数,

Block的本质

当你定义完block之后,其实是创建了一个函数,在创建结构体的时候把函数的指针一起传给了block,所以之后可以拿出来调用

__block修饰的变量传入Blcok是地址传递,普通变量传入block是值传递

Block的三种状态:

  1. _NSConcreteGlobalBlock全局静态;

  2. _NSConcreteStackBlock栈保存,函数作用域外销毁;

  3. _NSConcreteMallocBlock堆保存,retain == 0销毁

上一篇 下一篇

猜你喜欢

热点阅读