四、iOS 中的多线程
主要有三种:NSThread、NSoperationQueue、GCD
- NSThread:轻量级别的多线程技术
是我们自己手动开辟的子线程,如果使用的是初始化方式就需要我们自己启动,如果使用的是构造器方式 它就会自动启动。只要是我们手动开辟的线程,都需要我们自己管理该线程,不只是启动,还有该线程使 用完毕后的资源回收
- (void)threadTest1 {
// 使用初始化方式开辟子线程
NSThread * thread1 = [[NSThread alloc] initWithTarget:self selector:@selector(threadTestAction1:) object:@"我是参数1"];
// 使用初始化方法开辟出来的NSThread线程,需要start启动
[thread1 start];
// 为开辟的子线程命名
thread1.name = @"thread Test 1";
// 调整thread的权限,线程权限范围值为0~1,权限值越大权限越高,先执行的概率就越高,由于是概率,所以并不能很准确的实现我们想要的执行顺序
thread1.threadPriority = 1;
// // 取消当前已经启动的线程
// [thread1 cancel];
NSThread *thread2 = [[NSThread alloc] initWithBlock:^{
[self threadTestAction1:@"我是参数2"];
}];
thread2.threadPriority = 0.1;
[thread2 start];
// 使用构造器方式开辟子线程
[NSThread detachNewThreadSelector:@selector(threadTestAction1:) toTarget:self withObject:@"我是参数3"];
[NSThread detachNewThreadWithBlock:^{
[self threadTestAction1:@"我是参数4"];
}];
}
- (void)threadTestAction1:(NSString *)paramString {
NSLog(@"threadTestAction1 参数%@ thread %@",paramString,[NSThread currentThread]);
}
performSelector...只要是 NSObject 的子类或者对象都可以通过调用方法进入子线程和主线程,其实这些 方法所开辟的子线程也是 NSThread 的另一种体现方式。
在编译阶段并不会去检查方法是否有效存在,如果不存在只会给出警告
网友评论