- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我目前正在使用 GCD。但是,我听说 NSOperation
实际上是一个更高级别的程序。不过要复杂得多。
在 GCD 中,在后台做一些事情就是简单地使用我创建的这个辅助函数:
+(void)doForeGround:(void (^)())block
{
dispatch_async(dispatch_get_main_queue(), ^{
block();
});
}
+(void)doBackground:(void (^)())block
{
//DISPATCH_QUEUE_PRIORITY_HIGH
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW,0), ^{
//dispatch_async(dispatch_get_global_queue(-2,0), ^{
block();
});
}
-(void)doBackGround:(void (^)())block onComletion:(void (^)())onCompletion
{
[BGHPTools doBackground:^{
block();
[BGHPTools doForeGround:^{
onCompletion();
}];
}];
}
使用 NSOperation
会更简单吗?
我错过了什么吗?我如何在 NSoperation 做同样的事情?
最佳答案
您可以使用 NSOperation
执行与使用 GCD 类似的操作。主要区别在于 NSOperation
提供了额外的功能。
例如:
NSOperation
有一个 -cancel
方法。调度队列没有取消的概念;队列中排队的所有 block 都将运行完成。NSOperationQueue
有一个 maximumConcurrentOperationCount
属性,您可以使用它(例如)一次只允许 3 个操作运行。调度队列没有这样的概念;它们要么是串行的,一次只允许 1 个 block ,要么是并发的,允许 libdispatch
根据 CPU 使用率和可用性认为合适的数量。NSOperation
可以依赖于其他 NSOperation
,允许您推迟执行特定操作,直到它的所有依赖项都已运行。当依赖操作正在等待时,其他操作将被允许在队列中“向前跳转”。调度队列总是按照严格的 FIFO 顺序出队。 (您可以使用 dispatch_group
API 在某种程度上模仿依赖关系,但这实际上是针对不同类型的问题。)现在,如果您不使用这些功能中的任何一个,GCD 也能正常工作。使用 GCD 本身没有什么错误。只是 NSOperation 为一些额外的好特性提供了一个方便的包装器。
下面是如何使用 NSOperationQueue
重写上面的示例:
+(void)doForeground:(void (^)())block
{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
NSLog(@"I'm running on the main thread!");
block();
}];
}
+(void)doBackground:(void (^)())block
{
// Note; rather than allocating a new NSOperationQueue every time, you could
// allocate the queue once and just refer to that queue. For simplicity, I'll
// skip that here.
[[NSOperationQueue new] addOperationWithBlock:^{
NSLog(@"I'm running asynchronously on whatever thread NSOperationQueue wants!");
block();
}];
}
-(void)doBackground:(void (^)())block onCompletion:(void (^)())onCompletion
{
[[NSOperationQueue new] addOperationWithBlock:^{
block();
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
onCompletion();
}];
}];
}
关于objective-c - 哪个更容易使用? GCD 还是 NSOperation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12966506/
我正在开发一个包含大量类的项目,我想将它们编译成 jar。我知道入口点和manifest.txt以及我的jar中的所有需要的项目,我的类都已编译并具有.class文件和所有内容,但问题是我必须将所
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
在我的计算结束时,我打印结果: System.out.println("\nTree\t\tOdds of being by the sought author"); for (ParseTree p
我有一个具有多个时间范围的数据,例如考虑以下列 | from1 | to1 | from2 | to2 | from3 | to3 | | 06:00 | 07:30 | 09:30 |
我对 JavaScript 和 jQuery 相当缺乏经验,但对于我正在处理的 ASP.Net 网站,我需要两者。我正在慢慢弄清楚,但我一直严重依赖 StackOverFlow。 有谁知道有什么工具(
我正在考虑用 PHP 编写一些代码来更改图像的所有 id 以匹配其 alt。在 jQuery 中这会更容易实现吗? 我需要做的是走这条线 img alt="拼图"src="images/cole.jp
鉴于 websinte 的结构
假设我有 struct Value { int foo(); }; size_t *begin = ..., *end = ...; 如果我想在 C++03 中对一堆 Value 索
我开始创建一个将与公共(public) API 交互的 iPhone 应用程序。 我的问题是,使用 XML 还是 JSON 哪个更快和/或更容易? 最佳答案 根据 Sam Soffes , Touch
如果 PHP 是用 C 编写的,那么用 PHP 编写服务器端脚本与用 C 编写服务器端脚本究竟有什么区别,尤其是如果我使用的是 C 的 Web 框架可以处理 mysql 连接、SESSIONS 等?
我记得有一次看到一个人做的一个项目,他用某种语言用类似 json 的字符串编写了这样的东西,创建了非常好的 html。有没有类似的东西我可以用于 C# 或 .NET radio-box{ AName,
我的一位网页设计师 friend 仍在使用表格制作网站,但他使用 css 非常好,我也很好地使用 css,但使用 而且我在布局方面比我的 friend 更多地面临跨浏览器问题。 我向我的 friend
我想创建一个图,在那里可以看到 x 轴的替代刻度,例如pi/2, pi, 3pi/2, 等等。到目前为止,这对我来说只适用于一个相当不方便的代码(看看我创建的行 pi.halfs , pi.fulls
我是一名优秀的程序员,十分优秀!