美文网首页
多线程2

多线程2

作者: 艾克12138 | 来源:发表于2016-06-25 20:57 被阅读18次

#import "ViewController.h"

@interface ViewController ()

@property(nonatomic,strong)NSData *data;

@property (weak, nonatomic) IBOutlet UIImageView *imageview;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

}

//主线程回调事件

-(void)updateUi{

NSLog(@"刷新UI");

self.imageview.image =[UIImage imageWithData:self.data];

}

//手动开启线程

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

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

//开启线程

[thread start];

//结束线程有2种方式:

//取消线程;

[thread cancel];

//立即结束线程

[NSThread exit];

//判断一个线程是否正在执行

[thread isExecuting];

//判断一个线程是否完成了任务

[thread isFinished];

}

//自动开启线程

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

[NSThread detachNewThreadSelector:@selector(threadtest) toTarget:self withObject:nil];

NSLog(@"zouni");

}

//线程执行事件

-(void)threadtest{

//线程一定加autorealeasepool

//如果一个任务在子线程中执行,我们需要在任务里面添加autorealeasepool:原因:因为线程与线程之间是相互独立的,但是资源确实共享的在任务里可能会创建多个对象(在堆区开辟)如果没有释放的话,其他线程也无法访问和使用这个开辟的空间;

//主要是针对 在线称执行的任务中,大量使用便利构造器创建对象的时候,可能会造成很多堆区内存无法释放,导致内存泄漏问题.

@autoreleasepool {

//现获取当前线程

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

//判断是不是主线程

NSLog(@"是不是主线程%d",[[NSThread currentThread]isMainThread]);

//        NSInteger count =0;

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

//            count +=i;

//

//        }

//        NSLog(@"%ld",(long)count);

self.data =[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://pic.nipic.com/2007-11-09/200711912453162_2.jpg"]];

}

//回到主线程

[self performSelectorOnMainThread:@selector(updateUi) withObject:nil waitUntilDone:nil];

}

//nsobject主线程

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

//在主线程中执行某个方法

[self performSelectorOnMainThread:@selector(threadtest) withObject:nil waitUntilDone:YES];

}

//bsobject子线程

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

//在子线称重执行某个事件

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

}

- (IBAction)buttion1:(id)sender {

int count =0;

for (int i=0; i<1000000; i++) {

count += i;

}

NSLog(@"当前线程是:%@,是不是主线程%d",[NSThread currentThread],[[NSThread currentThread] isMainThread]);

NSLog(@"%d",count);

}

相关文章

  • Day18-多线程

    1.多线程技术1 2.多线程技术2 3.多线程技术 4.join函数

  • 多线程

    多线程技术 多线程技术2 多线程应用 server client join函数

  • Python-day-18多线程

    1、多线程技术1 二、多线程技术2 三、多线程应用 四、jion函数

  • iOS-多线程相关

    本篇涵盖多线程解析、应用等. 1.iOS多线程--彻底学会多线程之『RunLoop』2.iOS多线程--彻底学会多...

  • day18-多线程

    recode 一、多线程技术1 二、多线程技术2 三、client 多线程应用 四、join函数 耗时操作

  • iOS性能篇——并行开发其实很简单

    概览 1.多线程 1.1 简介 1.2 iOS 多线程 2.NSThread 2.1 解决多线程阻塞问题 2.2 ...

  • Java多线程目录

    Java多线程目录 Java多线程1 线程基础Java多线程2 多个线程之间共享数据Java多线程3 原子性操作类...

  • iOS多线程技术方案

    多线程技术方案 目录 一、多线程简介 1、多线程的由来 2、耗时操作的模拟试验 3、进程和线程 4、多线程的...

  • iOS开发之多线程(5)—— Pthreads

    文集 iOS开发之多线程(1)—— 概述iOS开发之多线程(2)—— ThreadiOS开发之多线程(3)—— G...

  • iOS开发之多线程(4)—— Operation

    文集 iOS开发之多线程(1)—— 概述iOS开发之多线程(2)—— ThreadiOS开发之多线程(3)—— G...

网友评论

      本文标题:多线程2

      本文链接:https://www.haomeiwen.com/subject/enbodttx.html