多线程


#import "ViewController.h"


@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    

   /* NSArray *array=@[@1,@2,@3];

    //数组排序

    //NSSortStable  :串行,在排序执行的时候,程序为顺序结构执行,排序不执行完成,后面的代码不会执行(耗时间,但结果安全).

    //NSSortConxurrent :并行,在程序执行的时候,程序为多线程方式,排序方法执行的时候,下面的代码 也同步执行(节省时间,结果不安全).

    [array sortedArrayWithOptions:NSSortConcurrent usingComparator:^NSComparisonResult(id obj1, id obj2) {

        return [obj1 compare:obj2];

    }];*/

    

    //iOS默认给主线程分配1M的栈空间,默认给子线程分配512k的栈空间(分配字节数必须是4k的整数倍).

    

    //分配的空间用来存放线程中的为变量开辟的空间,一般情况下足够使用.

    

    //与栈空间的使用方法不同,主线程和子线程共用一块堆空间.

    

    //程序入口处默认设置了自动释放池,由主线程负责执行代码,子线程开辟的内存不在主线程管辖范围内(线程间互不干扰,相互独立),所以子线程为对象开辟的空间不会自动释放,要手动为子线程书写自动释放池.

    

    //短时间内使用静态方法开辟大量内存空间或者循环使用便利构造器,会造成内存瞬间集聚,程序crash掉,所以我们书写自动释放池.

    

    

    //多线程种类:

    //1.脱离线程:线程结束后被销毁

    //2.非脱离线程:线程结束后被挂起,等待唤醒,不销毁

    

    //主线程是非脱离线程

    

    //iOS实现多线程的种类:

    //1.NSObject

    //2.NSThread

    //3.NSOperation/NSOperationQueue

    //4.GCD(※※※※※※)

    

    

    self.view.backgroundColor=[UIColor redColor];

    

    //  NSObject多线程实现方式

//    [self performSelectorInBackground:@selector(calculate) withObject:nil]; //nil 的位置为参数,可写可不写

    

    

    

    //NSThread  多线程方式

    //方式一  需要手动开启

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

//    [thread1 start];  //需要手动开启

    //方式二  不需要手动开启

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

    

    

    //NSOperation 多线程方式

    //方式一NSInvicationoperstion  必须手动开启

//    NSInvocationOperation *invocation=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(printA) object:nil];

//    [invocation start];

    

    //方式二  NSBlockOperation

//    __weak typeof (self) temp=self;  //block 会持有内部的变量,所以用__weak

//    NSBlockOperation *block=[NSBlockOperation blockOperationWithBlock:^{

//        [temp printB];

//    }];

//    [block start];

    

    

//    //可以通过NSOpreationQueue创建队列,向队列中添加操作,完成多任务同时完成,当最大并发数为1,变成了串行

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

//#warning 注意  --一定要提前设置好并发数

//    [queue setMaxConcurrentOperationCount:2]; //设置并发数

//    [queue addOperation:invocation];

//    [queue addOperation:block];

    

    

    

    

   

}


//A线程

-(void)printA{

    

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

        NSLog(@"%d",i);

    }

}


//B线程

-(void)printB{

    for (int i=101; i<200; i++) {

        NSLog(@"%d",i);

    }

}





-(void)test{

    

    @autoreleasepool {

        NSArray *array=@[@1,@2,@3,@4,@5];

        

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

            array=[array arrayByAddingObjectsFromArray:array];

        }

        NSLog(@"这是另外一个线程的方法");

    }

}



-(void)calculate{

    

    @autoreleasepool {

        NSArray *array=@[@1,@2,@3,@4,@5];

        

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

            array=[array arrayByAddingObjectsFromArray:array];

        }

        self.view.backgroundColor=[UIColor magentaColor];

        

        //判断是否是主线程

        NSLog(@"%d",[NSThread isMainThread]);

    }


}




- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值