您的位置:首页 > 产品设计 > UI/UE

iOS UI 21 线程

2015-12-13 16:36 316 查看
//

// RootViewController.m

// Ui - 21 线程

//

// Created by dllo on 15/12/9.

// Copyright (c) 2015年 dllo. All rights reserved.

//

#import "RootViewController.h"

#import "MyOperation.h"

@interface
RootViewController ()

@property (retain,
nonatomic) IBOutlet
UIImageView *imagev;

@end

@implementation RootViewController

- (void)viewDidLoad {

[super
viewDidLoad];

// Do any additional setup after loading the view from its nib.

}

- (void)threadAct

{

NSLog(@"当前线程:%@",
[NSThread currentThread]);

// for (NSInteger i = 0; i < 600000; i++) {

// NSLog(@"threadAct:%ld",i);

// }

//休眠

[NSThread
sleepForTimeInterval:1.0];

NSLog(@"分支线程休眠结束");

}

- (IBAction)thread:(UIButton *)sender {

//NSthread系统提供的轻量级线程方式

//
优点: 创建简单

// 缺点:
提供了太多的操作需要自己设置,若要使用需要对线程特别了解

//每次创建一个对象就是一个线程

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

//开始执行线程

[thread start];

[thread release];

NSLog(@":%@", [NSThread
mainThread]);

NSLog(@"判断是否为主线程:%d",
[NSThread isMainThread]);

// for (NSInteger i = 0; i < 600000; i++) {

// NSLog(@"主线程:%ld",i);

// }

[NSThread sleepForTimeInterval:2.0];

NSLog(@"主线程");

}

- (void)thAction{

[NSThread sleepForTimeInterval:1.0];

NSLog(@"分支线程休眠结束");

}

- (IBAction)object:(id)sender {

//NSObject
的线程方式

//优点:使用简单

//缺点:没有线程安全方面控制

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

NSLog(@":%@", [NSThread mainThread]);

NSLog(@"判断是否为主线程:%d", [NSThread isMainThread]);

[NSThread sleepForTimeInterval:2.0];

NSLog(@"主线程休眠结束");

}

//队
管理线程

- (IBAction)NSOperation:(id)sender {

// NSOperation 本身并没有并发的能力,
需要添加进NSOperationQueue队列中才可以

// 执行NSOperation仅是单独值和ing里面的main方法

MyOperation *op1 = [[MyOperation alloc]init];

// [op1 start];

MyOperation *op2 = [[MyOperation alloc]init];

MyOperation *op3 = [[MyOperation alloc]init];

MyOperation *op4 = [[MyOperation alloc]init];

//
创建管理队列

NSOperationQueue *queue = [[NSOperationQueue alloc]init];

//
设置最大并发数

//注意,一定要在添加进队列前设置

[queue setMaxConcurrentOperationCount:2];

//添加进队列

[queue addOperation:op1];

[queue addOperation:op2];

[queue addOperation:op3];

[queue addOperation:op4];

[op1 release];

[op2 release];

[op3 release];

[op4 release];

}

- (IBAction)GCD:(id)sender {

//创建自己的队列

//参数1 ,
标识

//参数2 , DISPATCH_QUEUE_SERIAL -
串行

// DISPATCH_QUEUE_CONCURRENT -
并行

// dispatch_queue_t myQ = dispatch_queue_create("myqueue", DISPATCH_QUEUE_CONCURRENT);

// //向队列中添加任务

// dispatch_async(myQ, ^{

//

// [self thAction];

// });

// dispatch_async(myQ, ^{

//

// [self thAction];

// });

//系统自带5个队列

//4个并列 ,
一个串

//除了自定义的队列外,系统提供了5个队列 -
一个串行队列和4个并行队列

//1个串行队列:主队列,专门用来管理主线程的

//4个并行队列:全局队列(单例方式),具有不同的优先级

//主队列

dispatch_queue_t mainQueue = dispatch_get_main_queue();

//全局队列

//参数1
优先级

//参数2
预留参数,只能填0;

dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

//网络请求

dispatch_async(globalQueue, ^{

NSURL *url = [NSURL URLWithString:@"http://img4.duitang.com/uploads/item/201207/28/20120728105310_jvAjW.thumb.600_0.jpeg"];

NSData *Data = [NSData dataWithContentsOfURL:url];

UIImage *image = [UIImage imageWithData:Data];

NSLog(@"image请求完毕");

// self.imagev.image = image;

//分支线程对于界面铺键刷新等操作的优先级很低,所以此类操作一般回到主线程进行操作

dispatch_async(mainQueue, ^{

self.imagev.image = image;

});

});

static dispatch_once_t once= 0;

dispatch_once(&once , ^{

NSLog(@"只执行一次");

});

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

/*

#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

// Get the new view controller using [segue destinationViewController].

// Pass the selected object to the new view controller.

}

*/

- (void)dealloc {

[_imagev release];

[super dealloc];

}

@end

//

// MyOperation.h

// Ui - 21 线程

//

// Created by dllo on 15/12/9.

// Copyright (c) 2015年 dllo. All rights reserved.

//

#import <Foundation/Foundation.h>

@interface MyOperation :
NSOperation

@end

//

// MyOperation.m

// Ui - 21 线程

//

// Created by dllo on 15/12/9.

// Copyright (c) 2015年 dllo. All rights reserved.

//

#import "MyOperation.h"

@implementation MyOperation

- (void)main

{

NSLog(@"===");

[NSThread
sleepForTimeInterval:1.0];

NSLog(@"睡醒了");

}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: