转自我的github: https://github.com/uniquejava/iOSConcurrencyDemo

swift3 concurrency

This repo is the steps breaking down from this excellent tutorial and an update for swift3 + xcode8. I seperated each step into its own commit,you can check the commit history for details.

The major difference is on GCD part,for NSOperation part,the changes are minor.

A compact example

Example from here qos - new quality of service Syntax

weak self - to disrupt retain cycles

async global background queue - for network query

async main queue - for touching the UI.

Of course you need to add some error checking to this...

dispatchQueue.global(qos: .background).async { [weak self]
  () -> Void in
  self?.flickrPhoto.loadLargeImage {
      loadedFlickrPhoto,error in
      if error != nil {
          print("error:\(error)")
      } else {
      
          dispatchQueue.main.async {
              () -> Void in
              activityIndicator.removeFromSuperview()
              self?.imageView.image = self?.flickrPhoto.largeImage
          }
      }
  }
}

Swift2 GCD cheetsheet

get main queue

swift2 version:

dispatch_get_main_queue()

swift3 version:

dispatchQueue.main

global concurrent queue

swift2 version:

let queue = dispatch_get_global_queue(disPATCH_QUEUE_PRIORITY_DEFAULT,0)

swift3 version:

let queue = dispatchQueue.global(qos: .default)

custom serial queue

swift2 version:

let queue = dispatch_queue_create("com.cyper.xxx",disPATCH_QUEUE_SERIAL)

swift3 version:

let queue = dispatchQueue(label: "com.cyper.xxx")

dispatchQueue by default is serial queue,you don't have to specify it in the initializer.

custom concurrent queue

swift2 version:

let queue = dispatch_queue_create("com.cyper.xxx",disPATCH_QUEUE_CONCURRENT)

swift3 version:

let queue = dispatchQueue(label: "com.cyper.xxx",qos: .userInitiated,attributes: .concurrent)

NSOperationQueue

  1. Removed the NS prefix
  2. Simplified the method name
  3. You can use xcode auto-fix

References

http://www.appcoda.com/ios-concurrency/

https://medium.com/swift-and-ios-writing/a-quick-look-at-gcd-and-swift-3-732bef6e1838#.ueryj2b2h

https://www.logcg.com/archives/2040.html

http://stackoverflow.com/questions/37805885/how-to-create-dispatch-queue-in-swift-3

Code

https://github.com/uniquejava/iOSConcurrencyDemo/blob/master/iOSConcurrencyDemo/ViewController.swift

Swift3 concurrency的更多相关文章

  1. 在Swift中应用Grand Central Dispatch(上

    在这两篇教程中,你会学到GCD的来龙去脉。起步libdispatch是Apple所提供的在IOS和OSX上进行并发编程的库,而GCD正是它市场化的名字。Swift中的闭包和OC中的块类似甚至于他们几乎就是可交换使用的。但OC中的块可以安全的替换成Swift中的闭包。再一次,这完全取决于GCD。QoS等级表示了提交任务的意图,使得GCD可以决定如何制定优先级。QOS_CLASS_USER_INteraCTIVE:userinteractive等级表示任务需要被立即执行以提供好的用户体验。

  2. 转 Grand Central Dispatch 基础教程:Part 1/2 -swift

    第一节将解释什么是GCD并了解几个GCD的基础函数。GettingStartedGCD是libdispatch的代名词,libdispatch代表着运行iOS与OSX的多核设备上执行并行代码的官方代码库。再有一点要记住的就是在任何GCD文档中涉及到Objective-C的块代码都是可以用Swift的闭包来替换的。举个具有线性安全性的代码示例leta=["thread-safe"]。因为,这一切都是由GCD控制的。任务的开始执行的时间完全由GCD决定。它也是唯一一个用作向UIView对象发送信息或推送监听。

  3. Swift3 concurrency

    转自我的github:https://github.com/uniquejava/iOSConcurrencyDemoswift3concurrencyThisrepoisthestepsbreakingdownfromthisexcellenttutorialandanupdateforswift3+xcode8.Iseperatedeachstepintoitsowncommit,youcan

  4. Swift3使用GCD和DispatchQueues

    在iOS中,苹果提供了两种方法来进行多任务处理:`GrandCentraldispatch`和`NSOperationQueue`框架。但在`Swift3`之前它都跟天书一样,与`swift`格格不入的古董C语言风格,晦涩难记的方法名都让你望而却步,码农们宁愿用`NSOperaionQueue`都不用`GCD`,稍微的搜索了解下你就会明白有多糟糕。正式进入话题:dispatchQueues入门在Swift3中,创建`dispatchqueue`方式如下:1letqueue=dispatchQueue只需给

  5. Windows 2008故障转移群集中的VLAN连接

    如果有可能我想设置这样的VLAN:或者可能:这是可能的还是你能提出什么建议?

  6. 无法通过组策略在Windows 10 Pro上设置DSCP

    在Windows10上设置“基于策略的QoS”不会将DSCP值应用于传出流量.我希望能够为某些进程设置DSCP流量的值.使用gpedit.msc组策略编辑器,我在计算机配置>下创建了一个策略.Windows设置>基于策略的QoS>并将DSCP值设置为“10”.我尝试使用或不使用可执行文件名称.无论我做什么,查看NetMon中的流量都会显示DSCP值为0.在应用“不使用NLA”注册表项https:/

  7. java – mac上的logback返回问号而不是单词

    我刚刚开始使用logback来记录在glassfish3AS上运行的Java项目,我注意到了一些奇怪的事情.这段代码如果我在Windows上运行我的应用程序,则生成正常的预期输出.但如果我在Mac上的配置相同,我会有问号而不是文字,如下所示:我的logback配置是:有人可以告诉我,我做错了什么?

  8. 用户启动的qos.overcommit中的iOS崩溃.什么可能创建此队列?

    我有一个实时应用程序的崩溃报告:最有用的信息似乎是发生崩溃的队列的名称:com.apple.root.user-initiated-qos.overcommit.我检查了所有代码,我使用主队列,系统后台队列(即不是用户启动的qos),或者我自己创建的命名队列.我的应用程序中还包含其他SDK,因此很可能这些SDK可能会将工作分配到此队列.但在我认为是这种情况之前,我想知道是否有任何常见的原因,iOS

  9. Cisco IOS QoS优先考虑SSH而不是SCP

    如何确定ssh流量的优先级以确保低延迟但限制SCP文件传输?我正在寻找一个非特定主机的解决方案,所以我不必添加IP地址列表.谢谢!解决方法您可以使用数据包长度来区分这些数据包长度,但是存在这些数据将被SSH传输切断和混合的风险.截止点是从这个空气中任意挑选出来的,你必须调整并看看哪些对你有用.

  10. 隧道接口上的IOS QOS服务策略传递

    解决方法我非常怀疑优先级队列可以以这种方式应用于隧道接口.QoS功能适用于实际带宽竞争的对象–物理接口.如果您的隧道仅用于SIP或其他高优先级流量,您可以将其整体匹配并添加到您的类地图,如下所示:UPD:在某些情况下,原始数据包的DSCP字段被复制到隧道头.您可以针对特定情况选择此选项.成功之后,您不需要最后一个匹配,初始配置应该可以正常工作.

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部