Block系列文章—————————————
Block笔记(1)—— 基本认识
Block笔记(2)—— 底层结构
Block笔记(3)—— 基础类型的变量捕获
Block笔记(4)—— Block的类型
Block笔记(5)—— 对象类型的auto变量捕获
Block笔记(6)— __block的深入分析
————————————————————
Block是什么
通俗的理解:Block就是将一些代码封装起来,以便在将来某个时候被使用,如果你不去调用Block,Block内部封装的代码就不会执行。举一个简单的例子,下面在main
函数中定义一个最简单的Block
int main(int argc, const char * argv[]) {
@autoreleasepool {
^{
NSLog(@"I am a block!");
NSLog(@"I am a block!");
NSLog(@"I am a block!");
NSLog(@"I am a block!");
};
return 0;
}
********************** 运行结果 ************************
Program ended with exit code: 0
运行程序运行可以看到Block内的代码是没有运行的,因为没有调用。Block的使用也很简单,可以像函数一样被使用。加上()
就代表调用,如下
int main(int argc, const char * argv[]) {
@autoreleasepool {
^{
NSLog(@"I am a block!");
NSLog(@"I am a block!");
NSLog(@"I am a block!");
NSLog(@"I am a block!");
}();
return 0;
}
********************** 运行结果 ************************
2019-05-28 17:18:56.992746+0800 Interview03-block[2640:180864] I am a block!
2019-05-28 17:18:56.992924+0800 Interview03-block[2640:180864] I am a block!
2019-05-28 17:18:56.992939+0800 Interview03-block[2640:180864] I am a block!
2019-05-28 17:18:56.992947+0800 Interview03-block[2640:180864] I am a block!
Program ended with exit code: 0
如果上面写的太简练不习惯的话,通常大家可能是这么写
int main(int argc, const char * argv[]) {
@autoreleasepool {
void (^testBlock)(void) = ^{
NSLog(@"I am a block!");
NSLog(@"I am a block!");
NSLog(@"I am a block!");
NSLog(@"I am a block!");
};
testBlock();
*****