// // ZYThreadViewController.h // Thread // // Created by yejiong on 15/11/4. // Copyright © 2015年 zzz. All rights reserved. // #import <UIKit/UIKit.h> @interface ZYThreadViewController : UIViewController @end
// // ZYThreadViewController.m // Thread // // Created by yejiong on 15/11/4. // Copyright © 2015年 zzz. All rights reserved. // #import "ZYThreadViewController.h" @interface ZYThreadViewController () @end @implementation ZYThreadViewController - (void)viewDidLoad { self.view.backgroundColor = [UIColor whiteColor]; if ([NSThread isMainThread]) { NSLog(@"主线程"); }else { NSLog(@"分线程"); } } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { //1.在分线程中执行 target 的 selector 方法,传入一个参数 argument。 // NSThread* thread = [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:@"123"]; // // [thread start]; // // [thread release]; //2.创建并开启一个分线程。 // [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"789"]; //3.隐式的创建一个分线程执行 selector 方法。 [self performSelectorInBackground:@selector(run:) withObject:@"000"]; } //以前在分线程中需要我们自己去创建 NSAutoreleasePool 释放在分线程中使用的 autorelease 变量,现在没有这个限制了。 - (void)run:(id)object { NSLog(@"%@", object); //设置线程休眠多少秒。 // [NSThread sleepForTimeInterval:1.0]; //使线程休眠到某个时间。 // [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]]; if ([NSThread isMainThread]) { NSLog(@"主线程"); }else { NSLog(@"分线程"); } //回到主线程执行 方法调用者 的 selector 方法。 [self performSelectorOnMainThread:@selector(mainThreadLog:) withObject:@"456" waitUntilDone:NO]; //wait //YES,等待 selector 方法中的内容执行完毕在继续执行分线程中的内容,阻塞当前线程。 //NO,不等待,两者同时执行,并发执行。 NSLog(@"----------"); NSLog(@"----------"); NSLog(@"----------"); NSLog(@"----------"); NSLog(@"----------"); NSLog(@"----------"); NSLog(@"----------"); NSLog(@"----------"); } - (void)mainThreadLog:(id)objcet { NSLog(@"%@", objcet); if ([NSThread isMainThread]) { NSLog(@"主线程"); }else { NSLog(@"分线程"); } } @end