当前位置: 代码迷 >> Iphone >> 网络开始-多线程-NSThread-01-根本使用(了解)(二)
  详细解决方案

网络开始-多线程-NSThread-01-根本使用(了解)(二)

热度:459   发布时间:2016-04-25 05:32:14.0
网络开始---多线程---NSThread-01-基本使用(了解)(二)
 1 #import "HMViewController.h" 2  3 @interface HMViewController () 4  5 @end 6  7 @implementation HMViewController 8  9 - (void)viewDidLoad10 {11     [super viewDidLoad];12     // Do any additional setup after loading the view, typically from a nib.13 }14 15 //下载操作,16 - (void)download:(NSString *)url17 {18     NSLog(@"下载东西---%@---%@", url, [NSThread currentThread]);19     20     21     22     23     24 }25 26 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event27 {28     [self createThread3];29 }30 31 /**32  * 创建线程的方式333  隐式创建线程并自动启动线程34  */35 - (void)createThread336 {37 //    这2个不会创建线程,在当前线程中执行38 //    [self performSelector:@selector(download:) withObject:@"http://c.gif"];39 //    [self download:@"http://c.gif"];40     41     //这个隐式创建线程,在后台会自动创建一条子线程并执行download方法,42     [self performSelectorInBackground:@selector(download:) withObject:@"http://c.gif"];43 }44 45 /**46  * 创建线程的方式247  创建线程后自动启动线程48  */49 - (void)createThread250 {51     //从当前线程中分离出一条新的线程52     [NSThread detachNewThreadSelector:@selector(download:) toTarget:self withObject:@"http://a.jpg"];53 }54 55 /**56  * 创建线程的方式157  创建线程后不会自动启动,需要写一句启动才会启动线程58  这种创建线程的方法是3种当中最好的,可以对线程进行详细的设置59  60  */61 - (void)createThread162 {63     // 创建线程64     NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(download:) object:@"http://b.png"];65     66     //线程的名字,打印线程的时候可以看到打印的线程的名字67     thread.name = @"下载线程";68     69     object://你开辟线程要执行的方法要传的参数,比如这里传一个url,传到download方法里70     //这个参数是要从当前线程传到子线程中去的71     72     // 启动线程(调用self的download方法) 只有启动线程才会调用self的download方法73     [thread start];  //必须有这一句才能启动线程74     //并且执行过程是在子线程中执行的,就是新开辟的一条线程 把耗时操作成功放到子线程中去75     76     [NSThread mainThread];//获得主线程77    NSThread *current=[NSThread currentThread];//获得当前线程78     79     80     [thread isMainThread];//判断当前线程(新创建线程)是否为主线程,返回Bool值81     [NSThread isMainThread];// 判断当前执行代码的方法是否在主线程,返回Bool值82     83 }84 85 @end