#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