1、简介:
1.1
iOS有三种多线程编程的技术,分别是:
1.、NSThread
2、Cocoa NSOperation (iOS多线程编程之NSOperation和NSOperationQueue的使用)
3、GCD 全称:Grand Central Dispatch( iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用)
这三种编程方式从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,也是Apple最推荐使用的。
这篇我们主要介绍和使用NSThread,后面会继续2、3
的讲解和使用。
1.2
三种方式的有缺点介绍:
NSThread:
优点:NSThread
比其他两个轻量级
缺点:需要自己管理线程的生命周期,线程同步。线程同步对数据的加锁会有一定的系统开销
NSThread实现的技术有下面三种:
<TABLE style=‘font: 13px/26px "Lucida Grande", Geneva, Helvetica, Arial, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; margin-bottom: 4em; word-spacing: 0px; border-top-color: rgb(155, 179, 205); border-left-color: rgb(155, 179, 205); border-top-width: 1px; border-left-width: 1px; border-top-style: solid; border-left-style: solid; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;‘
class="graybox " border="0" cellSpacing="0" cellPadding="5">
|
<P style=‘margin: 0px 0px 0.33em; padding: 0px; font-family: "Lucida Grande", Geneva, Helvetica, Arial, sans-serif; font-weight: bold;‘>Technology
|
<P style=‘margin: 0px 0px 0.33em; padding: 0px; font-family: "Lucida Grande", Geneva, Helvetica, Arial, sans-serif; font-weight: bold;‘>Description
|
|---|
|
<P style=‘margin: 0px; padding: 0px; font-family: "Lucida Grande", Geneva, Helvetica, Arial, sans-serif;‘>Cocoa
threads |
<P style=‘margin: 0px; padding: 0px; font-family: "Lucida Grande", Geneva, Helvetica, Arial, sans-serif;‘>Cocoa
implements threads using the NSThread class. Cocoa also provides methods
on NSObject for spawning new threads and
executing code on already-running threads. For more information,
see “Using NSThread” and “Using NSObject to Spawn a Thread.” |
|
<P style=‘margin: 0px; padding: 0px; font-family: "Lucida Grande", Geneva, Helvetica, Arial, sans-serif;‘>POSIX
threads |
<P style=‘margin: 0px; padding: 0px; font-family: "Lucida Grande", Geneva, Helvetica, Arial, sans-serif;‘>POSIX
threads provide a C-based interface for creating threads. If you are not
writing a Cocoa application, this is the best choice for creating threads.
The POSIX interface is relatively simple to use and offers ample
flexibility for configuring your threads. For more information,
see “Using POSIX Threads” |
|
<P style=‘margin: 0px; padding: 0px; font-family: "Lucida Grande", Geneva, Helvetica, Arial, sans-serif;‘>Multiprocessing
Services |
<P style=‘margin: 0px; padding: 0px; font-family: "Lucida Grande", Geneva, Helvetica, Arial, sans-serif;‘>Multiprocessing
Services is a legacy C-based interface used by applications transitioning
from older versions of Mac OS. This technology is available in OS X only
and should be avoided for any new development. Instead, you should use
the NSThread class
or POSIX threads. If you need more information on this technology,
see Multiprocessing Services Programming Guide. |
一般使用cocoa
thread 技术。
Cocoa
operation
优点:不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上。
Cocoa
operation 相关的类是 NSOperation
,NSOperationQueue。NSOperation是个抽象类,使用它必须用它的子类,可以实现它或者使用它定义好的两个子类:NSInvocationOperation
和 NSBlockOperation。创建NSOperation子类的对象,把对象添加到NSOperationQueue队列里执行。
GCD
Grand
Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法。在iOS4.0开始之后才能使用。GCD是一个替代诸如NSThread,
NSOperationQueue,
NSInvocationOperation等技术的很高效和强大的技术。现在的iOS系统都升级到6了,所以不用担心该技术不能使用。
介绍完这三种多线程编程方式,我们这篇先介绍NSThread的使用。
2、NSThread的使用
2.1
NSThread 有两种直接创建方式:
-
(id)initWithTarget:(id)<SPAN style=‘font-family: "Lucida Grande", Geneva, Helvetica, Arial, sans-serif; font-size: 13px;‘>target
selector:(SEL)
"Lucida Grande", Geneva, Helvetica, Arial, sans-serif; font-size: 13px;‘>selector object:(id)"Lucida Grande", Geneva, Helvetica, Arial, sans-serif; font-size: 13px;‘>argument
+
(void)detachNewThreadSelector:(SEL)<SPAN style=‘font-family: "Lucida Grande", Geneva, Helvetica, Arial, sans-serif; font-size: 13px;‘>aSelector toTarget:(id)<SPAN
style=‘font-family: "Lucida Grande", Geneva, Helvetica, Arial, sans-serif; font-size: 13px;‘>aTarget withObject:(id)<SPAN
style=‘font-family: "Lucida Grande", Geneva, Helvetica, Arial, sans-serif; font-size: 13px;‘>anArgument
第一个是实例方法,第二个是类方法
16px/26px Consolas, "Courier New", Courier, mono, serif; margin: 18px 0px; width: 935px; text-align: left; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; overflow: auto; padding-top: 1px; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(231, 229, 220); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;‘
>
[cpp] <A style=‘margin: 0px 10px 0px 0px; padding: 1px; width: 16px; height: 16px; color: rgb(160, 160, 160); text-indent: -2000px; font-size: 9px; text-decoration: none; display: inline-block; background-image: url("http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif");‘
class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command(‘ViewSource‘,this);return false;"
href="http://blog.csdn.net/totogo2010/article/details/8010231">view plain<A
style=‘margin: 0px 10px 0px 0px; padding: 1px; width: 16px; height: 16px; color: rgb(160, 160, 160); text-indent: -2000px; font-size: 9px; text-decoration: none; display: inline-block; background-image: url("http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_copy.gif");‘
class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command(‘CopyToClipboard‘,this);return false;"
href="http://blog.csdn.net/totogo2010/article/details/8010231">copy
- 1、[NSThread detachNewThreadSelector:@selector(doSomething:) toTarget:self withObject:nil];
- 2、NSThread* myThread = [[NSThread alloc] initWithTarget:self
- selector:@selector(doSomething:)
- object:nil];
- [myThread start];
【说明】:
本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!