iOS多线程篇-NSThread简单使用

2016-01-12  本文已影响1252人  LitterL

-(void)threadCreate1{
NSLog(@"主线程-------%@",[NSThread currentThread]);
//创建线程
NSThread thread = [[NSThread alloc]initWithTarget:self selector:@selector(run:) object:@"子线程"];
//开始执行线程
[thread start];
NSLog(@"主线程-------%@",[NSThread currentThread]);
}
/
*
* 线程执行方法
*
*/
-(void)run:(id)obj{
for (int i=0; i<3; i++) {
NSLog(@"%@----%@",[NSThread currentThread],obj);
}
}
```
* 结果

- ###`第二种`
    * 介绍

    ```objc
 /*
 分离出一条子线程
 第一个参数:线程启动调用的方法
 第二个参数:目标对象
 第三个参数:传递给调用方法的参数
 */
[NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"我是分离出来的子线程"];
```
    * 使用

    ```objc
 /**
  *  第二种方式创建
  */

-(void)threadCreate2{
NSLog(@"主线程-------%@",[NSThread currentThread]);
//detachNewThreadSelector 会理解在后台执行selector方法
[NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"我是分离出来的子线程"];
NSLog(@"主线程-------%@",[NSThread currentThread]);
}
/**

*/
-(void)run:(id)obj{
for (int i=0; i<3; i++) {
NSLog(@"%@----%@",[NSThread currentThread],obj);
}
}
```
* 结果


- ###`第三种`
 * 介绍

    ```objc
后台线程
 //第一个参数:线程启动调用的方法
 //第二个参数:传递给调用方法的参数
//特点:自动启动线程
[self performSelectorInBackground:@selector(run:) withObject:@"我是后台线程"];
```
 * 使用

    ```objc

/**
第三种方式创建
/
-(void)threadCreate3{
NSLog(@"主线程-------%@",[NSThread currentThread]);
//是NSObject分类的一个方法,意味着所有继承于NSObject的类都是用用此方法,并且在其他线程执行方法!
//只要设定,那么它会立即在后台执行 selector 方法
[self performSelectorInBackground:@selector(run:) withObject:@"后台线程"];
NSLog(@"主线程-------%@",[NSThread currentThread]);
}
/

*线程执行方法

*/
-(void)run:(id)obj{
for (int i=0; i<3; i++) {
NSLog(@"%@----%@",[NSThread currentThread],obj);
}
}
```
* 结果


//线程的各种状态:新建-就绪-运行-阻塞-死亡
//常用的控制线程状态的方法
[NSThread exit];//退出当前线程
[NSThread sleepForTimeInterval:2.0];//阻塞线程
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:2.0]];//阻塞线程
//注意:线程死了不能复生
```

*  使用
```objc

/**

*/
-(void)run:(id)obj{
for (int i=0; i<8; i++) {
if(i==2){
NSLog(@"睡5秒");
//[NSDate dateWithTimeIntervalSinceNow:5.0] 从现在开始过了5秒
//睡到指定的日期,
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:5.0]];
}
NSLog(@"%@----%d",[NSThread currentThread],i);
//当线程满足一定的条件,可以强行停止
if (i==5) {
//退出
[NSThread exit];
}
}
NSLog(@"这里是不能来的,因为在5的时候就退出了");
}
```
* 结果


* 扩展

####`一定不能在主线程执行 [NSThread exit] 如果一旦执行了那么程序则会终止掉`
                    本章到此结束
            欢迎各位码友随意转载并指正
上一篇 下一篇

猜你喜欢

热点阅读