您的位置:首页 > 编程语言 > C语言/C++

黑马程序员****OC语言基础****Block概念和理解

2015-10-28 00:52 489 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
——-

     Block:

                Block对象是一个C级别的语法和运行机制。 

                由于Objective-C 和 C++ 都是衍生自 C,block被设计为可同时兼容这三种语言。 
               定义格式:

                void(^block名)()
= ^{代码块;} 

                使用格式:

                block名(); 

                block可以分为:无参无返回值、无参有返回值、有参无返回值、有参有返回值

                当block作为返回值:

<span style="font-size:24px;">#import <Foundation/Foundation.h>

typedef void (^newType)();
newType test1 () {
newType w1 = ^{
NSLog(@"XXXXX");
NSLog(@"Good");};
return w1;
}

typedef int (^bestType2)(int a,int b);
bestType2 test2(){
return ^(int a,int b){
return a+b;
};
}

int main(int argc, const char * argv[]) {
@autoreleasepool {
newType n1 = test1();
n1();
bestType2 n2 = test2();
int x = n2(45,76);
NSLog(@"x = %d",x);

}
return 0;
}</span>


            运行结果:xxxxx

                               Good
                              x = 121
            block类型作为返回值,可以参考函数作为返回值进行理解

           实例分析:用block传递程序员的一天

/*

起床
刷牙
去车站
坐车
了解项目
去车站
坐车回家
吃饭
睡觉

*/

#import <Foundation/Foundation.h>

//workBlock作为参数
void work(void (^workBlock)()){
NSLog(@"起床");
NSLog(@"刷牙");
NSLog(@"去车站");
NSLog(@"坐车");
workBlock();     //此处是代码段插入的位置
NSLog(@"去车站");
NSLog(@"坐车回家");
NSLog(@"吃饭");
NSLog(@"睡觉");
}

typedef void (^workBlock)();
workBlock w;
void workDay(int n){

switch (n) {
case 1:

w = ^{
NSLog(@"了解项目");
};
break;

//            work(^ {
//                NSLog(@"了解项目");
//            });
//            break;
case 2:
w = ^ {
NSLog(@"分析项目");
};
break;

//            work(^ {
//                NSLog(@"分析项目");
//            });
//            break;

case 3:
w = ^ {
NSLog(@"写项目");
};
break;

//            work(^ {
//                NSLog(@"写项目");
//            });
//            break;

case 4:
w = ^ {
NSLog(@"调试项目");
};
break;

//            work(^ {
//                NSLog(@"调试项目");
//            });
//            break;

case 5:
w = ^ {
NSLog(@"离职");
};
break;

//            work(^ {
//                NSLog(@"离职");
//            });
//            break;

default:
break;
}
work(w);

}

int main(int argc, const char * argv[]) {
@autoreleasepool {
for (int i=1; i<=5; i++) {
workDay(i);
NSLog(@"---------------");
NSLog(@"---------------");
}
}
return 0;
}

            运行结果:

  起床
 刷牙
 去车站
 坐车
 了解项目
 去车站
 坐车回家
 吃饭
 睡觉

---------------
---------------

  起床

 刷牙

 去车站

 坐车

 分析项目

 去车站

 坐车回家

 吃饭

 睡觉

---------------
---------------

 起床

 刷牙

 去车站

 坐车

 写项目

 去车站

 坐车回家

 吃饭

 睡觉

---------------

---------------

 起床

 刷牙

 去车站

 坐车

 测试项目

 去车站

 坐车回家

 吃饭

 睡觉

---------------

---------------

 起床

 刷牙

 去车站

 坐车

 离职

 去车站

 坐车回家

 吃饭

 睡觉

---------------

---------------

            注释内的内容是另一种写法,直接插入代码段就可以,不用每次调用work函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: