iOS线程之NSThread
来源:互联网 发布:python 字符串变json 编辑:程序博客网 时间:2024/06/05 20:58
NSThread
一、创建方法
使用initWithTarget方法,有返回值
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:@"jack"];
使用detachNewThreadSelector方法,没有返回值
[NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"rose"];
使用performSelectorInBackground方法,没有返回值
[self performSelectorInBackground:@selector(run:) withObject:@"maple"];
二、常用方法
获得主线程
+ (NSThread *)mainThread;
是否为主线程
- (BOOL)isMainThread;+ (BOOL)isMainThread;
获得当前线程
NSThread *current = [NSThread currentThread];
三、线程的状态
线程的状态图
控制线程状态的方法
启动线程
- (void)start;
阻塞线程
+ (void)sleepUntilDate:(NSDate *)date;+ (void)sleepForTimeInterval:(NSTimeInterval)ti;
强制停止线程
+ (void)exit;
四、多线程安全的安全隐患
出现的问题
当多个线程同时访问同一个资源的时候,很容易引发数据错乱和数据安全的问题,如买票,取钱等问题
解决方法–互斥锁
- 互斥锁使用格式
- @synchronized(锁对象) { // 需要锁定的代码 }
- 锁对象必须是同一对象,并且锁定1份代码只用1把锁,多把锁是无效的
- 互斥锁的优缺点
- 优点:能有效防止多线程强占同一资源造成的安全问题
- 缺点:需要消耗大量CPU资源
- 互斥锁的使用前提
- 多个线程使用同一资源
原子属性,非原子属性
- OC在定义属性时有nonatomic和atomic两种选择
- atomic:原子属性,为setter方法加锁(默认就是atomic)
- nonatomic:非原子属性,不会为setter方法加锁
五、线程间的通信
简介
- 在一个进程中,线程往往不是独立存在的,多个线程之间需要经常通信
- 线程的通信体现在
- 1个线程传递数据给另1个线程
- 在1个线程中执行完特定任务后,转到另1个线程继续执行任务
常用方法
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait;
0 0
- iOS线程之NSThread
- IOS-线程操作之NSThread/NSOperation/GCD
- ios之NSThread开辟子线程方法
- iOS 之多线程 NSThread
- iOS NSThread线程
- IOS 多线程 线程NSThread
- IOS 多线程 线程NSThread
- IOS线程 NSThread
- iOS线程其一NSThread
- iOS中NSThread线程
- 线程之NSThread
- 线程之NSThread二
- ios多线程之NSThread,GCD,NSOperation以及线程同步
- ios多线程之NSThread,GCD,NSOperation以及线程同步
- ios多线程之NSThread,GCD,NSOperation以及线程同步
- ios关于线程调度的三种方式之NSThread
- ios多线程之NSThread,GCD,NSOperation以及线程同步
- iOS多线程之NSThread
- 重装ubuntu后不能连接wifi无线
- 【51Nod 1255】字典序最小的子序列
- C++ 动态链接库的两种调用方式
- STM32 库函数编写程序
- autolayout 动态计算高度时 UILabel的preferredMaxLayoutWidth设置
- iOS线程之NSThread
- Android 多媒体控制 来电监听-耳机插拔监听-耳机按钮监听-MediaSession-MediaStyle
- 指针在函数中的应用
- 玩玩python之爬取补天厂商列表
- 在网站添加客服QQ,打开临时回话框(不用加为好友)
- vibe算法入侵检测,找轮廓,并且画轮廓
- Android中XML使用
- 如何使用ajax接受json返回的字符串数组,并动态异步显示到超链接的下面
- 利用Angular2的Observables实现交互控制