2018-02-01
2018-02-01 本文已影响0人
Txink
代码块和并发性
标签: OC学习
1.代码块
传统的函数指针:void (*my_func)(void);
代码块的定义:将*
换成^
;
1.1 举例:
int (^square_block)(int number) =
^(int num){return num*num;};
int result = square_block(6);
printf("Result = %d\n", result);
<font color='green'>实现方式:</font>
<returntype> (^blockname)(list of arguments) = ^(arguments){ body; };
返回类型,参数表都是可以省略的部分,如下例一个极简代码块:
void (^theBlock)() = ^{ printf("Hello World\n"); };
1.2 代码块的使用
- 同一般函数直接通过函数名调用;
- 直接将代码块当做参数;
2.并发性
核心方法:GCD
2.1 NSObject提供的方法
performSelectorInBackground:withObject:
能够创建一个线程在后台运行方法;
限制:
- 必须创建自动释放池
- 方法不能有返回值,至多有一个参数
示例:
//方法函数定义
-(void) myBackgroundMethod:(id)myObject
{
@autoreleasepool
{
NSLog(@"My background method %@",myObject);
}
}
//方法调用
[self performSelectorInBackground:@selector(myBackgroundMethod) withObject:argumentObject];
2.2 调度队列
使用方法:
实现方法代码,然后为其指派一个队列
- 连续队列
- 并发队列
- 主队列
1)连续队列:一连串任务按照一定顺序执行,先入先出;
//第一个参数为队列名称,第二个参数为队列特性
dispatch_queue-t myQueue;
myQueue = dispatch_queue_create("queueName",NULL);
2)并发队列:系统提供3种:高优先级
,默认优先级
,低优先级
,
dispatch_queue-t myQueue;
myQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0);
3)主队列:使用dispatch_get_main_queue
可以访问与应用程序主线程有关的连续队列;
dispatch_queue-t myQueue;
myQueue = dispatch_get_current_queue(void);