iOS多线程学习(2)——NSThread和NSOperation

来源:互联网 发布:日语网络课程360网盘 编辑:程序博客网 时间:2024/05/21 09:49

上一篇  iOS多线程学习(1)——GCD 我们初步介绍了一下多线程和使用GCD来实现多线程。上次我们也提及,iOS使用多线程除了GCD之外,还有NSThread和NSOperation。这也是我们这一篇的重点。


首先感谢未来技术对iOS多线程的详解,大家想要了解更多的细节可以到 http://blog.ccskill.com/1269.html 。

本文主要通过一个项目来展示多线程在我们实际应用中的作用,不会涉及太多的多线程的基本知识点,反而会加入有关JSON数据解析,图片下载的内容。如果大家只是想查阅有关多线程的知识,可以到iOS开发文档 https://developer.apple.com/library/ios/navigation/ 去查阅。


首先我们要知道,苹果是推荐使用GCD的。

NSThread是早期的多线程管理方法,比NSOperation和GCD都要轻量级,但是使用会比较繁琐,需要自己管理线程的生命周期,线程同步。线程同步对数据的加锁一定的系统开销。而NSOperation则是IOS的一个抽象类,相比较NSThread而言比较简单,不需要程序员关心线程的管理,只需要专心代码功能的实现就好。至于GCD这里就不在赘述了,大家可以看我上一篇的博客。

好,我们开始通过一个项目来具体使用一下多线程的优点。

(1)新建一个项目,在storyboard里把UIViewController删除,同时把UIViewController的源文件一并删除。

(2)拖建一个UITabelViewController,把它设置为初始画面,由于我们只有这一个画面,我们就不用做其他的事情了。


(3)建立好UITabelView的框架,这里我不会说的很详细,具体我会在另外一篇博客中介绍,这里只给出步骤:

1。New->file,创建cocoa Touch class,一个类用于保存我们的数据,一个类用于关联我们的UITableViewController。(这是基于我们MVC的编程原理)

2。storyboard的UITableViewController关联我们新建的类,数据类编写好我们的数据类型。本文的tablecell类型设置为subtitle类型。


根据本文需要保存的数据,我的数据类编写为myInfomation.h / .m




(3)下面我们使用多线程来显示我们tableview的UI。

使用NSThread来获取数据。(如何获取和解析JSON数据不在本文内容范围,大家可以去http://blog.csdn.net/enuola/article/details/7903632/了解)

本文使用的是第三方json解析包   TouchJson包   下载: http://download.csdn.net/detail/enuola/4523169

在UItableViewController.m的viewDidLoad方法里进行数据初始化


关注点:


⬆️创建和start我们的NSThread线程,并且我们在前面使用了线程锁来保证数据的读取正确性。


⬆️要求我们返回主线程,否则我们将一直处于我们创建的线程中,这里为了刷新我们的tableView的UI,直接使用tableView的reloadData方法即可。⬇️



(4)数据的下载时间通常很短,而图片的下载则很长,所以我们使用NSOperation来实现多线程更新UI

NSOperation是一个抽象类,不可以实例化,我们可以使用它的子类

NSBlockOperation


关注点:


NSBlockOperation可以直接使用多个block,放入队列中等待执行,这是相比NSThread的优势。

(5)最后我们仍然使用GCD来模拟一下多线程的使用,这里只是为了介绍实现GCD的方便,你不是必须这样做。



END.总结

苹果是推荐我们使用GCD,因为GCD相比其他两个而言更加简单,更加抽象。

那么多线程的学习就到这里。。

0 0
原创粉丝点击