iOS 多线程

      先说说,什么是线程:一个运行着的程序就是一个进程。 一个进程至少包含一个线程。 App程序一启动,就会创建一个进程,同时,也创建一个线程,我们管这个线程叫主线程。 主线程在程序中的地位与其他线程不同,所有与UI相关的UIKit操作,都是在主线程中进行的。对于iOS用户而言, 所有的操作都可以归结为对界面的操控。

      iOS系统中的每一个进程都有自己独立的虚拟内存空间,而同一个进程中的多个线程则共用进程的内存空间。 每创建一个线程,都需要一些内存和消耗一定的CPU。 iOS线程应用并不是无节制的,官方给出的资料显示iOS的主线程的堆栈大小是1M,第二个线程开始都是512KB。并且该值不能通过编译器开关或线程API函数来更改。

 

 

想要创建线程,需要3种方法:

 (1)使用NSThread

 (2)NSOperation

  (3)GCD (Grand Central Dispatch) 

 

 

1、  NSThread

 

调用方法如下:如果需要函数参数的话,可以通过Object传递。

 

(1):[NSThread detachNewThreadSelector:@selector(threadInMainMethod:) toTarget:self withObject:nil];

 

 

 

(2):NSThread* myThread = [[NSThread alloc] initWithTarget:self selector:@selector(threadInMainMethod:) object:nil];

 

 [myThread start]; 

 

(3): [obj performSelectorInBackground:@selector(threadMe) withObject:nil];

 

 

 

2、  NSOperation:

 

NSOperation也是多线程的一种,NSOpertaion有2种形式.

 

(1) 并发执行

 

       并发执行你需要重载如下4个方法

 

     //执行任务主函数,线程运行的入口函数

 

    - (void)start 

 

       //是否允许并发,返回YES,允许并发,返回NO不允许。默认返回NO

 

    -(BOOL)isConcurrent 

 

    - (BOOL)isExecuting

 

     //是否已经完成,这个必须要重载,不然放在放在NSOperationQueue里的NSOpertaion不能正常释放。

 

   - (BOOL)isFinished

 

   

 

   比如TestNSOperation:NSOperaion 重载上述的4个方法,

 

   声明一个NSOperationQueue, NSOperationQueue *queue = [[[NSOperationQueue alloc ] init] autorelease];

 

  [queue addOperation:testNSoperation];

 

  它会自动调用TestNSOperation里的 start函数,如果需要多个NSOperation,你需要设置queue的一些属性,如果多个NSOperation之间有依赖关系,也可以设置,具体可以参考API 文档。 

 

 

 

(2)非并发执行

 

  -(void)main

 

   只需要重载这个main方法就可以了。 

 

 

 

3、  GCD

 

其实这种方法很强大,  也是苹果公司建议使用的,我给大家推荐一个网址很全面的介绍了GCD。http://www.cnblogs.com/vinceoniphone/archive/2011/04/07/2007968.html

posted on 2014-06-10 21:29  那场樱花雪  阅读(116)  评论(0编辑  收藏  举报

导航