Effective Object-C 52:37-46

2017-05-19  本文已影响9人  惜壤

六、块与大中枢派发

块(block) 、大中枢派发(Grand center Dispatch, GCD)

语法闭包(lexical closure)

37.理解“块”这一概念

基础

块的语法结构:

return_type (^block_name)(parameters)

一般应用:
内联块(inline block)直接内联在函数调用中使用。
numerateObjectsUsingBlock:

块的内部结构

图1

“栈块”、“堆块”、“全局块”。

一开始定义的块其所占的内唇区域是分配在栈内。通过copy 就会分配到堆中。

全局块:不会捕捉任何状态,运行时也无须有状态来参与。所使用的整个内存区域,在编译器已经完全确定,全局块可以声明在全局内存里。

38. 为常用的块类型创建typedef

因为每个块都具备“固有类型”(inherent type),因此可以赋给适当类型的变量。

^(BOOL flag, int value){
    if (flag) {
        return value * 5;
    }else{
        return value * 10;
    }
    
};
  
//变量类型以及赋值语句  
int(^variableName)(BOOL flag, int value) = ^(BOOL flag, int value){
    return 1;
};
    
variableName(YES, 10);

//块类型的语法结构
return_type (^block_name)(parameters)

使用C语言中“类型定义”(type definition)特性
例子:

typedef int(^EOCSomeBlock)(BooL flag, int value);

EOCSomeBlock block = ^(BOOL flag, int value){
        //Implementation
}

block(YES, 10);

39.用handler 块降低代码分散程度

40.用块引用其所属对象时不要出现保留环

41. 多用派发队列,少用同步锁

42.多用GCD,少用performSelector

43.掌握GCD及操作队列的使用时机

44.通过Dispatch Group机制,根据系统资源状况来执行任务

45.使用dispatch_once来执行只需要运行一次的线程安全代码

46.不要使用dispatch_get_current_queue

-略

上一篇下一篇

猜你喜欢

热点阅读