黑马程序员—oc语言学习心得—block
-------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1,程序一般用typedef定义一个block类型 然后调用
typedef void(^xxx)();
可使用助记符 inlineblock
2,Block内部可以访问外部变量;
默认情况下,Block内部不能修改外部的局部变量
给局部变量加上__block关键字,则这个局部变量可以在block内部进行修改。
3,block的作用:
利用block封装代码,可以作为函数返回值和函数参数,
提高了代码灵活性和效率
下面是自己写的代码 实现
#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; }
时间: 2024-10-23 03:15:20