·NSThread 每个NSThread对象对应一个线程,量级较轻
·优点:NSThread 比其他两个轻量级,使用简单
·缺点:需要自己管理线程的生命周期、线程同步、加锁、睡眠以及唤醒等。线程同步对数据的加锁会有一定的系统开销
// 创建方式一,有线程对象,需手段开启线程
NSThread *thread = [[NSThread alloc] initWithTarget:selfselector:@selector(threadAc1:) object:@"thread1"];
thread.name=@"thread1";
//手动开启线程
[threadstart];
//线程的大小
// thread.stackSize
//方式二:没有创建线程对象,自动开启线程
[NSThread detachNewThreadSelector:@selector(threadAc2:) toTarget:self withObject:@"thread2"];
//方式三:block创建方式没有创建线程对象,自动开启线程
[NSThread detachNewThreadWithBlock:^{
for(inti =0; i <50; i ++) {
NSLog(@"thread3:%d",i);
}
}];
// 方式四
[selfperformSelectorInBackground:@selector(threadAc3:) withObject:@"3"];
//回到主线程设置UI
[self performSelectorOnMainThread:@selector(threadAc4:) withObject:@"4" waitUntilDone:YES];
}
- (void)threadAc1:(NSString*)str{
NSLog(@"线程%@",[NSThread currentThread]);
for(inti =0; i <50; i ++) {
NSLog(@"thread1:%d",i);
if(i ==20) {
//休眠2秒后开始执行
[NSThread sleepForTimeInterval:2];
}elseif(i ==40){
//退出线程
[NSThreadexit];
}
}
//当前线程是否是多线程
if ([NSThread isMultiThreaded]) {
NSLog(@"开启多线程了%@ ",str);
}
//当前线程是否为主线程
// [NSThread isMainThread];
}
- (void)threadAc2:(NSString*)str{
NSLog(@"线程%@",[NSThread currentThread]);
for(inti =0; i <50; i ++) {
NSLog(@"thread2:%d",i);
}
if ([NSThread isMultiThreaded]) {
NSLog(@"开启多线程了%@ ",str);
}
}
- (void)threadAc3:(NSString*)str{
NSLog(@"线程%@",[NSThread currentThread]);
for(inti =0; i <50; i ++) {
NSLog(@"thread3:%d",i);
}
if ([NSThread isMultiThreaded]) {
NSLog(@"开启多线程了%@ ",str);
}
}
- (void)threadAc4:(NSString*)str{
NSLog(@"线程%@",[NSThread currentThread]);
for(inti =0; i <50; i ++) {
NSLog(@"thread4:%d",i);
}
if ([NSThread isMultiThreaded]) {
NSLog(@"开启多线程了%@ ",str);
}
}
网友评论