grand-central-dispatch相关内容
Mike Ash撰写了一篇有关Swift内置的轻量级通知系统的精彩文章:(基本思想是创建可以“监听"对象,即在状态发生某些变化时调用回调.为了使其具有线程安全性,创建的每个对象都拥有自己的dispatch_queue. dispatch_queue仅用于门控关键部分: dispatch_sync(self.myQueue) { // modify critical state in
..
我想让队列在循环时等待一小段时间.我正在考虑我的选择,并且正在测试暂停恢复队列,但这似乎需要几个活动部分.因此,我正在考虑改为使用睡眠或非睡眠状态.那更多的是一般的线程功能,并且想知道我是否应该避免使用睡眠,而是坚持使用GCD选项来使队列暂停. 我找到了一个相关的问题,但该回答表明他只是缺少一个包含.是否有将睡眠呼叫与GCD队列混在一起的问题? iphone-在Grand Cent
..
我想模仿c#中的Objective-C分派队列的行为.我看到有一个任务并行库,但是我真的不明白如何使用它,希望能对它有一些解释. 在目标c中,我将执行以下操作: -(void)doSomeLongRunningWorkAsync:(a_completion_handler_block)completion_handler { dispatch_async(my_queue, ^{
..
一位同事最近建议我使用pthreads代替GCD,因为它“更快".我不同意它的速度更快,但是pthreads的风险是什么? 我的感觉是,它们最终将不会像GCD那样不受白痴的困扰(我的团队是50%的白痴). pthread很难正确吗? 解决方案 GCD和pthreads都是异步进行工作的方式,但是它们有很大的不同.对GCD的大多数描述都是从线程和线程池的角度来描述它的,但是正如DrPi
..
我是Swift中的新秀,并且有这样的误解 创建调度队列有什么区别 样本1 let backgroundQueue = DispatchQueue(label: "com.app.queue", qos: .background, target: nil
..
我对此代码的行为有疑问: dispatch_async(queue, ^{ sleep(2); NSLog(@"step1"); dispatch_sync(queue, ^{ sleep(3); NSLog(@"step 2"); }); NSLog(@"step 3"); }); 我希望从这些行中获得step
..
我正在iOS 5中使用xmppframework开发聊天应用程序;效果很好. 但是我将Xcode更新为4.5.1,将iOS 5更新为iOS 6,将Mac OS更新为10.7.5,由于弃用问题,该项目无法正常工作.我将iOS 6中的所有方法替换为新方法,除了以下一种方法: dispatch_get_current_queue() 如何在iOS 6中替换此方法? 解决方案
..
我想为GCD调用创建一个宏,例如: dispatch_async(dispatch_get_main_queue(), ^{ stuff.... }); 宏可能看起来像这样: main(^ {...})? 不确定如何编写.有什么建议吗? 谢谢 解决方案 您可以定义如下宏: #define ASYNC(...) dispatch_async(dispatc
..
我有一个方法,有时可以在我的整个代码中调用它.下面是一个非常基本的示例,因为该代码处理了iPhone相册中的图像和文件,并标记了使用该方法完成后已处理的图像. @property (nonatomic, assign) dispatch_queue_t serialQueue; .... -(void)processImages { dispatch_async(self.ser
..
我的应用程序中目前有两个NSTimer计时器,它们负责获取数据和更新UI.最近我注意到,当计时器运行时,我的UI性能很差,例如,用户无法很好地滚动UITableview或根本无法滚动.我在其他地方读过,可以将计时器推入不同的运行循环中,这可能会有所帮助.这是我的计时器现在的样子: let aSelector : Selector = "updateLocation" timer = NSTi
..
我在主线程上将UIAlertController表示为: class HelperMethodClass: NSObject { class func showAlertMessage(message:String, viewController: UIViewController) { let alertMessage = UIAlertController(ti
..
我有一个singelton类,它将在应用程序委托中创建. 当我运行XCTTests时,将再次创建它. + (instancetype)urlSchemeManager { static dispatch_once_t onceToken; static UrlSchemeManager* _sharedInstance; dispatch_once(&once
..
当您需要在联网任务或操作的完成块中的主线程上执行某些操作时,哪种方法最合适?为什么?: OperationQueue.main.addOperation DispatchQueue.main.async 解决方案 有关这两种队列之间的区别的详细信息,请参阅Lion的答案. 这两种方法都行得通.但是,当需要更高级的计划(包括依赖项,取消等)时,通常需要NSOperation.所
..
我正在努力了解 DispatchSourceTimer 和 asyncAfter (对于我来说,排定需要每X秒运行一次的任务的时间,尽管了解计时器的差异可能对有用))(还是除了列出的计时器之外,Swift中还有另一种(更有效的)调度机制?). Timer需要在其开始的当前队列上有一个活动的运行循环. DispatchSourceTimer不需要. Timer可防止CPU进入空闲状态.这是否也
..
我认为我知道如何使用 DispatchGroup ,以便进行理解问题,我已经尝试过: class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() performUsingGroup() } func perfor
..
这比编码更像一个概念查询.我有一个自定义活动指示器,一个自定义视图.用户将拥有的唯一公共API是init(onFrame frame: CGRect),startAnimating()和stopAnimating(). 所以,我想在startAnimating方法中知道是否应该创建一个线程(无论是main还是DispatchQoS)来运行动画. 此外,如果我不将动画代码放入线程中,它将
..
我正在使用GCD通知主线程(该函数内部有2个异步调用) 我的代码: func getWavesByMostRecent(closure: @escaping ([Wave]?) -> Void) { var waves = [Wave]() let dispatchGroup = DispatchGroup() self.query = DatabaseMan
..
注意:这不是重复的问题,我已经见过调度组-无法通知主线程 关于 DispatchWorkItem ,没有任何答案 我有如下代码 let dwi3 = DispatchWorkItem { print("start DispatchWorkItem \(Thread.isMainThread)") sleep(2) print("end Dispat
..
有没有一种方法可以保存变量的当前值以供以后在块中使用? 例如,对于此Playground代码: import UIKit import XCPlayground XCPlaygroundPage.currentPage.needsIndefiniteExecution = true class testClass { var i = 0 func test() {
..
上面发生了什么: 从接收到的用户数据数组初始化领域模型. 在后台线程中的领域数据库中一次编写所有模型. 如果通过创建副本,Realm模型已经存在,则会对其进行更新. 任何人都可以在这里指导我有关我做错了什么. 解决方案 我遇到了类似的问题.在这里,您可能正在从其他线程访问领域对象.例如:您可以使用调度队列,但是更有可能在另一个线程中声明您要访问的对象.您可以在任何线程中都有
..