dispatch queue 类型
1:main queue
这个queue在main thread 上执行所以的task,比如那些在cocoa和cocoatouch ui 相关的方法。
dispatch_get_main_queue取得main queue
2:concurrent queue
这类queue 让你可以按顺序执行asynchronous 或者synchronous的task。多个并发queue在同一时刻可以同时执行多个task,不用进行线程管理。
dispatch_get_global_queue 取得一个concurrent queue
3:serial queue
这类queue,对你提交的synchronous 或者 asynchronous 的task 没有重要性区分,按照先进先出(fifo)的方式执行,这就意味这在同一时间只能执行一个block object。
这些task不是在main thread上运行,因此不会阻塞main thread。
dispatch_queue_create 创建一个 serial queue。dispatch_release 释放一个serial queue。
把task添加进queue 的方式
1:block
2:c function
如何创建一个block
返回值类型 block名称 参数
NSInteger (^subtract)(NSInteger,NSInteger) = ^(NSInteger paramValue,NSInteger paramFrom)
{
return paramFrom - paramValue;
}
NSString* (^intToString)(NSUInteger) = ^(NSUInteger paramInteger){
NSString *result = [NSString stringWithFormat:@"%lu",
(unsigned long)paramInteger];
return result;
};
typedef NSString* (^IntToStringConverter)(NSUInteger paramInteger);
IntToStringConverter inlineConverter = ^(NSUInteger paramInteger){
NSString *result = [NSString stringWithFormat:@"%lu",
(unsigned long)paramInteger];
return result;
};
block 可以被传递
- (NSString *) convertIntToString:(NSUInteger)paramInteger
usingBlockObject:(IntToStringConverter)paramBlockObject{
return paramBlockObject(paramInteger);
}
objective c 方法访问 variable 与 block 访问 variable之间的不同
• Local variables in block objects work exactly the same as in Objective-C methods.
局部变量的方式效果是一样的
• For inline block objects, local variables constitute not only variables defined within
the block, but also the variables that have been defined in the method that implements
that block object. (Examples will come shortly.)
对于内嵌block 对象,局部变量的构成不仅仅是由定义在block内部的变量构成
• You cannot refer to self in independent block objects implemented in an
Objective-C class. If you need to access self, you must pass that object to the block
object as a parameter. We will see an example of this soon.
你不可以引用self对象在独立的block object中,如果你需要访问self,你必须把self作为一个参数传递给block。
• You can refer to self in an inline block object only if self is present in the lexical
scope inside which the block object is created.
在内嵌block中你可以引用self,只要self在创建block object 的lexical scope内
• For inline block objects, local variables that are defined inside the block object’s
implementation can be read from and written to. In other words, the block object
has read-write access to variables defined inside the block object’s body.
内嵌block对声明在block内部的局部变量具有读写权限
• For inline block objects, variables local to the Objective-C method that implements
that block can only be read from, not written to. There is an exception, though: a
block object can write to such variables if they are defined with the __block storage
type. We will see an example of this as well.
对于内嵌block object ,在objective c 方法中的局部变量,block 对象只能read,不能written。除非改变量被声明为 _ _ block
• Suppose you have an object of type NSObject and inside that object’s implementation
you are using a block object in conjunction with GCD. Inside this block
object, you will have read-write access to declared properties of that NSObject inside
which your block is implemented.
• You can access declared properties of your NSObject inside independent block objects
only if you use the setter and getter methods of these properties. You cannot
access declared properties of an object using dot notation inside an independent
block object.
分享到:
相关推荐
iOS多线程编程是iOS开发中的一个重要技能,对于提升应用程序的性能和用户体验至关重要。在iOS平台上,多线程编程可以通过多种技术实现,包括NSThread、Grand Central Dispatch(GCD)、Operation Objects等。本文档...
CGD系列电磁流量计传感器的安装...总的来说,CGD系列电磁流量计传感器的安装涉及多个因素,包括环境条件、管道配置、流体特性以及电气连接等。正确安装能确保流量计的准确性和可靠性,为工业控制提供稳定的数据支持。
OpenGL是计算机图形学中的一种广泛应用的编程接口,用于在各种操作系统和硬件平台上创建二维和三维图形。这个压缩包包含了一系列的资源,可以帮助开发者深入学习和实践OpenGL高级编程以及可视化编程。 1. **OpenGL...
本文将深入探讨GCD的基础概念、多线程以及如何通过Block来提高效率,这些都是从标题和描述中提炼出的关键知识点。 一、GCD基础 GCD,也被称为libdispatch,是一个底层的系统框架,它负责管理和调度应用程序中的任务...
NinjaGame-CGD是一个由CGD(可能是Creative Game Development或类似团队的缩写)小组开发的游戏项目,它以C#编程语言为基础,揭示了游戏开发过程中的多个关键知识点。在这个项目中,我们可以深入探讨C#在游戏开发中...
springboot2.x版本的redis配置java类,修改redis缓存默认过期时间。
一个简单的cg程序,在openGL中画一条线段,在cg中进行顶点变换成正弦曲线,在运行之前需要下载并按照cg安装包
【标题】"CGD-21-09:初级高级队9"可能指的是一个编程竞赛或者训练课程,其中“CGD”可能代表“Computer Graphics Department”(计算机图形学部门)或者“Challenge Game Development”(挑战游戏开发),而“21-09...
X-CGD 细胞中的慢性肉芽肿病 (CGD) 表型 研究文章 慢病毒介导的 gp91phox 基因转移可纠正人类 X-CGD 细胞中的慢性肉芽肿病 (CGD) 表型 Sandra O. Saulnieroff1 Dirk Steinh 1 Mary C. Dinauer2 Romain Zufferey3 ...
Lentivirus-mediated gene transfer of gp91phox corrects chronic granulomatous disease (CGD) phenotype in human X-CGD cells RESEARCH ARTICLE Lentivirus-mediated gene transfer of gp91phox corrects ...
他们将经历多次草稿和反馈循环,以优化设计并确保其满足项目要求。此外,有效的沟通技巧也很重要,包括制作演示文稿和清晰地阐述设计决策。 总的来说,Test_42:CGD第一年的FMP是CGD学习者展示其综合技能、创新能力...
华为C8812E固件版本为V100R001C92B946,运行于Android 4.0系统之上,专为中国电信定制,代码标识为05011CGD。该固件支持一系列先前的版本进行升级,包括但不限于V100R001C92B943SP01、V100R001C92B942SP02等,直至...
1. **虚拟仿真生物医药加工厂 (CGD-001-AE)**: 这是一个基于真实流程的模拟系统,包括100个运行授权,可支持多学生同时学习。系统适用于多种本科课程的实验教学,如《传感器检测与转换技术》等,涵盖了化工过程自动...
Ciss定义为Cgs+Cgd,Coss为Cds+Cgd,而Crss就是Cgd。这些电容参数会随着施加给器件外部电压的变化而变化,影响VDMOS的开启延迟时间td(on)、上升时间tr、关断延迟时间td(off)和下降时间tf。 Cgd的大小直接影响器件的...
国家大气研究中心气候与全球动力学研讨会系列日期:2021年4月27日,星期二时间:11am – 12pm 有关缩放信息,请联系Tracy Baker 有关直播信息,请访问全球海洋热波时空连通性的新见解哥伦比亚大学Hillary Scannell,...
Cgd则由两部分构成:JFET区域与门电极的重叠以及耗尽区电容,这使得Cgd成为Vds电压的函数,表现出非线性特性。Cds是非线性的体二极管结电容,也受到电压的影响。这些电容的参数通常在规格书(Spec)上以Crss、Ciss和...
当Cgd充电时,Vgs会保持不变,直到Cgd充满电时,Vgs才开始上升。这时,MOST开始进入饱和区,Vds开始下降,Id开始上升。 米勒效应的影响是非常大的,它会增加MOST开通的时间和损耗,降低MOST的性能。为了减少米勒...
在MOS管中,主要有三种电容:Cgs(栅源电容)、Cgd(栅漏电容)以及Cds(漏源电容)。这些电容的特性会直接影响到MOS管的工作状态和性能。 Cgs和Cgd是MOS管内部的重要组成部分,它们会受到所加电压的影响。Cgs相...