标签:
使用系统提供的创建子线程的方法,自动开启.对于耗时的工作,我们需要将工作交给子线程去做.主线程来执行界面的加载和处理用户的交互.这样我们就可以提高用户的体验度
<span style="font-size:24px;"> NSLog(@"thread = %@ isMainThread = %d",[NSThread currentThread],[NSThread isMainThread]);</span>
[NSThread detachNewThreadSelector:@selector(task1) toTarget:self withObject:nil];// withObject代表的是@selector(task1)中task1方法所带的参数
//2手动创建子线程 // NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(task1) object:nil]; // [thread start]; // [thread release];
3 使用NSobject
<span style="font-size:24px;"> [self performSelectorInBackground:@selector(downLoadImage) withObject:nil]; [self performSelectorInBackground:@selector(timerAction) withObject:nil];</span>
- (void)downLoadImage
{
@autoreleasepool {
NSString *urlSTr = @"http://image.zcool.com.cn/56/13/1308200901454.jpg";
NSURL *url = [NSURL URLWithString:urlSTr];
//从网络请求资源都是二进制数据
//内存泄露,原因:在子线程执行的方法中系统默认不会加自动释放池
NSData *imageData = [NSData dataWithContentsOfURL:url];
[self performSelectorOnMainThread:@selector(loadImage:) withObject:imageData waitUntilDone:YES];
}
}- (void)timerAction
{
//子线程中存在事件循环处理机制(Runloop,但是默认状态是关闭的,因此需要手动开启)
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(otuPutAction) userInfo:nil repeats:YES];
//打开runloop:(子线程默认是有runLoop的,但是默认是关闭的)
[[NSRunLoop currentRunLoop] run];
}<span style="font-size:18px;"> //4 线程队列: NSOperationQueue
//1?? 创建任务
NSInvocationOperation *operation1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(task2:) object:@"cuijin"];
NSInvocationOperation *operation2 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(task3:) object:@"liyang"];
//2?? 创建队列
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
//3?? 添加任务
[queue addOperation:operation1];
[queue addOperation:operation2];
//4?? 释放所有权
[queue release];
[operation2 release];
[operation1 release];</span>
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/cola_wh/article/details/47807045