Block编程总结【iOS】
2016-08-12 21:19
316 查看
没有返回值、没有形参的block
block 用来保存一段代码block的标志:^
block跟函数很像:
可以保存代码
有返回值
有形参
调用方式一样
定义 block 变量
void (^myblock)() = ^(){ NSLog(@"----------------"); NSLog(@"----------------"); };
如果block没有形参,可以省略后面的()
void (^myblock)() = ^{ NSLog(@"----------------"); NSLog(@"----------------"); };
利用block变量调用block内部的代码
myblock();
有返回值、有形参的block
指针函数的指针int (*p)(int, int) = sum; int d = p(10, 12); NSLog(@"%d", d);
int (^sumblock)(int, int) = ^(int a, int b){ return a + b; }; int c = sumblock(10, 11);
用一个block输出n条横线
void (^lineBlock)(int) = ^(int n) { for (int i = 0; i<n; i++) { NSLog(@"----------------"); } }; lineBlock(5);
分割
访问变量问题
int a = 10; __block int b = 20; void (^block)(); block = ^{ // block内部可以访问外面的变量 //NSLog(@"a = %d", a); // 默认情况下,block内部不能修改外面的局部变量 // a = 20; // 给局部变量加上__block关键字,这个局部变量就可以在block内部修改 b = 25; }; block();
分割
用好 typedef
int (^sumBlock)(int, int); sumBlock = ^(int a, int b) { return a + b; }; int (^minusBlock)(int, int) = ^(int a, int b) { return a - b; };
上述方式创建代码过于繁琐,利用 typedef 简化
typedef int (^MyBlock)(int, int); int main() { MyBlock sumBlock; sumBlock = ^(int a, int b) { return a + b; }; MyBlock minusBlock = ^(int a, int b) { return a - b; }; MyBlock multiplyBlock = ^(int a, int b) { return a * b; }; NSLog(@"%d - %d - %d", multiplyBlock(2, 4), sumBlock(10 , 9), minusBlock(10, 8)); return 0; }
分割
总结 block 需要掌握的内容
如何定义block变量int (^sumBlock)(int, int); void (^myBlock)();
如何利用block封装代码
^(int a, int b) { return a - b; }; ^() { NSLog(@"----------"); }; ^ { NSLog(@"----------"); };
block访问外面变量
block内部可以访问外面的变量
默认情况下,block内部不能修改外面的局部变量
给局部变量加上__block关键字,这个局部变量就可以在block内部修改
利用typedef定义block类型
typedef int (^MyBlock)(int, int); // 以后就可以利用MyBlock这种类型来定义block变量 MyBlock block; MyBlock b1, b2; b1 = ^(int a, int b) { return a - b; }; MyBlock b3 = ^(int a, int b) { return a - b; };
相关文章推荐
- IOS 网络编程总结
- IOS 网络编程总结 (转)
- iOS编程技巧总结之语音篇(三)- OpenEars框架及其使用2
- ios中socket简单编程总结
- iOS多线程编程:线程同步总结
- iOS开发笔记(六)网络编程总结
- 总结:ios数据持久化存储&文件系统编程
- iOS编程技巧总结之语音篇 一
- ios网络编程专题总结
- ios编程时常见问题总结
- iOS多线程编程:线程同步总结
- ios多线程编程概要 总结
- iOS多线程编程概要总结
- iOS编程技巧总结之语音篇(二)- OpenEars框架及其使用1
- IOS多线程编程:线程同步总结
- ios开发笔记之 网络编程总结
- ios 网络编程总结
- iOS网络编程总结
- ios并发编程的总结
- iOS多线程编程:线程同步总结