iOS 多线程入门02--NSThread

2018-08-02  本文已影响13人  XieHenry

一、pthread ✨

这个是c语言的,很少用到。更多资料可以百度自行了解。

二、NSThread ✨✨

1.使用方法
//写法1:
// 创建一个NSThread
NSThread * thread = [[NSThread alloc]initWithTarget:self selector:@selector(demo:) object:@"Thread"];
//启动线程
[thread start];


//写法2 类方法创建并启动线程
[NSThread detachNewThreadSelector:@selector(demo:) toTarget:self withObject:@"Detach"];


//写法3
//InBackground 就是在后台(子线程)运行!!
//是NSObject的分类 意味着所有的基础NSObject的都可以使用这个方法
//非常方便.不用NSThread对象
[self performSelectorInBackground:@selector(demo:) withObject:@"background"];


-(void)demo:(id)obj{
}

部分属性:

//获得当前线程
NSThread *current = [NSThread currentThread];

// 获得主线程
+ (NSThread *)mainThread; 

// 是否为主线程
- (BOOL)isMainThread; 

 // 是否为主线程
+ (BOOL)isMainThread;

//线程的名字 -命名多线程的名字,方便找到问题所在
- (void)setName:(NSString *)n;
- (NSString *)name;   //x.name = @"Thread A";

//启动线程
- (void)start; 

//阻塞(暂停)线程  进入阻塞状态
+ (void)sleepUntilDate:(NSDate *)date;
+ (void)sleepForTimeInterval:(NSTimeInterval)ti;

//强制停止线程   进入死亡状态
+ (void)exit;    //[NSThread exit];


//优先级 从 0.0 -- 1.0  默认值 0.5
/*
多线程目的:将耗时操作放在后台,不阻塞UI线程!
建议:在开发的时候,不要修改优先级
在多线程开发中,不要相信一次的运行结果!!
*/
t.threadPriority = 0.1;
2.多线程的安全隐患---资源共享

一块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源。
比如多个线程访问同一个对象、同一个变量、同一个文件。
当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题。

3.安全隐患解决-互斥锁
@synchronized(锁对象) { // 需要锁定的代码 
 }
注意:锁定1份代码只用1把锁,用多把锁是无效的

优点:能有效防止因多线程抢夺资源造成的数据安全问题
缺点:需要消耗大量的CPU资源

iOS 多线程入门01--概念知识
iOS 多线程入门03--GCD
iOS 多线程入门04--NSOperation

上一篇下一篇

猜你喜欢

热点阅读