2018-02-01

代码块和并发性

标签: 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);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,860评论 18 139
  • 原来 我也可以像雪花一样 静静地 静静地等待血液里的热情 从跳动的指尖一点一点地流出来 直到嚣张的世界烧为灰烬 摸...
    梅芳的行影记阅读 273评论 0 1
  • 今天早晨起来后发现下雪,打电话物流车不走,没去进货,也没去店里,就留在家里了一天。 自从开了店以来,在家闲着的日子...
    朵嘉浓静静阅读 719评论 0 0
  • 作者:李磊 看见各位文笔佳,字体妙;也不禁来凑个热闹~ 记得那是2011农历年末的一个阴晴未定的早晨,踏上了去往西...
    晖说阅读 193评论 0 0
  • 时光飞逝,感觉一月份到现在还没过多久,又一次到了羊城。与冬季阴雨绵绵夹杂着凉意相比,一下飞机感觉还是很暖和的。急匆...
    mr_alec阅读 247评论 0 0