block(一)了解block
block就是代码块组成的匿名函数,block是oc对于闭包的实现
1.可以嵌套定义,定义block方法和定义函数方法相似
2.block可以定义在方法内部或外部
3.只有调用block的时候,才会执行block内的代码
4.block本质是对象,使代码高聚合
定义block使用typedef
typedef void(^KCBlock)(ViewController*);
block有三种类型
1. __NSGlobalBlock__ 静态block 全局
2. __NSMallocBlock__ 堆block 堆
3. __NSStackBlock__ 栈block 栈
!!全局块存在于全局内存中,相当于单例
!!栈块存在于栈内存中,超出其作用域则马上被销毁
!!堆块存在于堆内存中,是一个带引用计数的对象,需要自行管理其内存
int a = 10;//捕获外部变量
__block int a = 10;//__block修饰的可以在block内部修改a的值,__block是浅拷贝了一个值,内存地址改变了
//无参无返回block
void(^block)(void) = ^{
NSLog(@"hello block");
};//匿名函数
NSLog(@"第一种block%@",block); //万物皆对象-->RAC万物皆signal
void(^twoblock)(void) = ^{
NSLog(@"hello block %d",a);
};//匿名函数
block();
twoblock();
NSLog(@"第二种block%@",twoblock);
NSLog(@"第三种block:%@",^{
NSLog(@"%d",a);
});