黑马程序员—oc语言学习心得—block
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流------
Block封装了一段代码,可以在任何时候执行
Block可以作为函数参数或者函数的返回值,而本身又可以带输入参数或返回值
block,在多线程、异步任务,集合遍历,集合排序、动画专场用得多
(1)定义BLOCK变量
Int (^SumBlock)(int,int);//有参数,返回值类型为int
Void (^MyBlock)();//无参数,返回值类型为空
(2)利用block封装代码
(3)Block访问外部变量
1)Block内部可以访问外部变量;
2)默认情况下,Block内部不能修改外部的局部变量
3)给局部变量加上__block关键字,则这个局部变量可以在block内部进行修改。
4)利用typedef定义block类型(和指向函数的指针很像)
Typedef int(^MyBlock)(int ,int);
以后就可以利用这种类型来定义block变量了。
MyBlock a,b;
a=^(int a,int b){return a-b;};
MyBlock b2=^(int n1,int n2){return n1*n2;};
- #import <Foundation/Foundation.h>
- //void (^workBlock)() block座位函数参数传递
- typedef void(^Newbolck)();
- void work(int n){
-
- NSLog(@"起床。。。。");
- NSLog(@"刷牙。。。。");
- NSLog(@"洗脸。。。。");
- NSLog(@"去公司。。。。");
- //workBlock(); //此处不一样
- Newbolck workDay(int a); // 声明方法,因为方法主体在下面
-
- Newbolck w=workDay(n);//此处workDay(n)的返回值为newblock对象
-
- w();//执行代码块
-
- NSLog(@"回家。。。。");
- }
- typedef void(^newType)();
- //返回值为block类型
- newType test(){
- newType n1=^{
-
- NSLog(@"xxxxxxx");
- NSLog(@"yyyyyyyy");
- };
- return n1;
- }
- //带两个参数的block做做返回值
- typedef int(^newType2)(int,int);
- newType2 test2(){
- return ^(int a,int b){
-
- return a+b;
- };
- }
- //让他返回值为block类型
- Newbolck workDay(int a){
-
- //简化
- //typedef void(^Block)(); //定义别名
- Newbolck w; //定义bolck类型变量 不用加 * 号.....
-
- switch (a) {
- case 1:
- w =^(){
-
- NSLog(@"了解项目");
-
- };
- case 2:
- w =^(){
-
- NSLog(@"开发项目");
-
- };
- case 3:
- w =^(){
-
- NSLog(@"卖了项目");
-
- };
- break;
-
- default:
- break;
- }
-
- // work(w);
- return w;
- }
- int main(int argc, const char * argv[]) {
- @autoreleasepool {
- //for (int i=1; i<=5; i++) {
-
- work(1);
-
-
- // }
-
-
- // 调用返回值为block类型方法
-
- //因为test()方法返回值是block对象 因此创建对象接受
- newType n2=test();
- n2();
-
- newType2 n3=test2();
- int result=n3(3,8);
- NSLog(@"result=%d",result);
-
-
-
-
- workDay(1);
- printf("\n");
-
- workDay(2);
- printf("\n");
-
-
- workDay(3);
- printf("\n");
-
-
-
-
-
- void (^myblock)(int,int)=^(int a,int b)
- {
-
- NSLog(@"a+b=%d",a+b);
-
- };
- myblock(2,8);
-
-
- typedef int(^Newbolck)(int,int);
-
-
- Newbolck b1=^(int x,int y)
- {
-
- return x+y;
-
- };
-
- Newbolck b2=^(int x,int y){
-
-
- return x>y? x:y;
-
- };
-
-
-
- NSLog(@"b1->%d",b1(2,5));
- NSLog(@"b2->%d",b2(5,9));
-
-
- }
-
- return 0;
-
-
- }
复制代码
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流------
|