码迷,mamicode.com
首页 > 移动开发 > 详细

iOS开发多线程

时间:2015-10-05 22:00:04      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:

- (void)viewDidLoad {

    [super viewDidLoad];

    /*进程:正在运行的程序 线程:进程的基本执行单元,任务执行的地方

     线程的串行:1个线程中任务的执行时串行的,同一时间,1个线程只能只能执行一个任务

     多线程:1个进程中可以开启多个线程,原理是CPU快速地在多条线程之间调度(切换),多了CPU吃不消

     主线程/UI线程:显示/刷新/处理UI,把耗时的处理放到子线程*/

    

    /*创建线程 

     手动启动线程:[thread start] 接着就会执行任务

    NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(text) object:nil];

     自动启动线程:

     [NSThread detachNewThreadSelector:@selector(text) toTarget: withObiect:]

     隐式创建并启动:

     [self performSelectorInBackground:@selector(text) withObject:]

     

    获取主线程

    NSThread *mainThread = [NSThread mainThread];

    判断是否是主线程

    BOOL *b = [mainThread isMainThread];

    获取当前线程

    NSThread *currentThread = [NSThread currentThread];

    线程调度的优先级

    +(double)threadPriority;

    +(BOOL)setThreadPriority:(double)p;

    设置线程的名字

    -(void)setName:(NSString *)n;

    -(NSString *)name;

     退出线程:+exit

     */

    

    /*线程安全:一块资源可能会被多个线程访问,容易引发数据错乱和数据安全问题

    解决:线程同步技术,互斥锁 @synchronized(锁对象){//需要锁定的代码}

     一个时间段只有一个线程能访问,直到该线程完事

     atomic:原子属性,线性安全,为setter方法加锁

    */

    

    /*线程间的通信:线程之间传递数据,传递任务

     -(void)performSelectorOnMainThread: withObject: waitUntilDone:

     -(void)performSelector: onThread: withObiect: waitUntilDone:

     

     */

    /*线程的堵塞(调用sleep方法或者是同步锁,此时线程不可被调度):

     第一种 [NSThread sleepForTimeInterval:2.0];

     第二种 以当前时间为基准NSDate *date = [NSDate dateWithTimeIntervalSinceNow:4.0];

     [NSThread sleepUntilDate:date];

     线程的死亡:任务结束 发生异常 强制退出

     创建了线程,但是线程不会立刻开启!!!!

     */

    

    

    

    

    

    

}

 

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

    [self performSelectorInBackground:@selector(download) withObject:nil];

}

-(void)download

{   //获得一张图片

    NSString *imageStrring = [NSString stringWithFormat:@"http://i6.topit.me/6/5d/45/1131907198420455d6o.jpg"];

    NSURL *imageUrl = [NSURL URLWithString:imageStrring];

    NSData *imageData = [NSData dataWithContentsOfURL:imageUrl];

    UIImage *image = [UIImage imageWithData:imageData];

    //返回主线程 第二个是要传到这个方法中的参数

    [self performSelectorOnMainThread:@selector(settingImage:) withObject:image waitUntilDone:NO];

}

-(void)settingImage:(UIImage *)image

{

    self.imageView.image = image;

}

//

//- (IBAction)buttonClicked:(id)sender {

//    NSThread *currentThread = [NSThread currentThread];

//    NSLog(@"currentThread----%@",currentThread);

//    NSThread *mainThread = [NSThread mainThread];

//    NSLog(@"mainThread-----%@",mainThread);

//    [self creatNewThread];

//   

//}

//-(void)creatNewThread

//{

//    NSThread *newThread = [[NSThread alloc]initWithTarget:self selector:@selector(run) object:nil];

//   newThread.name = @"线程A";

//    [newThread start];

//}

//-(void)run

//{   NSThread *current = [NSThread currentThread];

//    for (int i=0; i<100; i++) {

//        NSLog(@"run---%@",current);

//    }

//}

 

iOS开发多线程

标签:

原文地址:http://www.cnblogs.com/haugezi/p/4856299.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!