IOS多线程
-
IOS多线程的开销
- 内核数据结构-大约1KB。
- 栈空间-子线程512KB,主线程1MB。(通过线程对象可以使用
-setStackSize:
函数设置线程空间,但必须是4K的倍数,而且最小是16K) - 创建线程大约需要90毫秒。
-
什么是主线程?
- iOS程序运行后,会默认开启一条线程,这条线程称为
主线程
或者叫做UI线程
。
- iOS程序运行后,会默认开启一条线程,这条线程称为
-
主线程(UI线程)的作用?
- 显示或者刷新UI界面。
- 处理UI事件.(点击事件、滚动事件、拖拽事件等)
-
主线程的使用注意事项
- 不要将耗时的操作放到主线程中。
-
互斥锁(线程同步技术 )
- 互斥锁
@synchronized
的使用格式
@synchronized(锁对象)
- 互斥锁
{
//锁定的代码
}
//使用的的锁对象需要保证是同一个对象。
* 互斥锁使用举例
//声明锁
@interface ViewController ()
/锁对象
@property (nonatomic, strong) NSObject *locker;
@end
@implementation ViewController
-(void)viewDidLoad
{
//初始化锁
self.locker = [[NSObject alloc] init];
//创建线程
self.thread = [[NSThread alloc] initWithTarget:self selector:@selector(sub-thread) object:nil];
//开始线程
self.thread start];
}
-(void)sub-thread
{
@synchronized(锁对象)
{
//锁定的代码
}
}
@end
* 互斥锁的优缺点
* 优点:可以解决多线程同时操作同一数据引发的数据安全问题。
* 缺点:浪费CPU资源。
########```注意事项```
* 不要在主线程里加互斥锁,加到子线程里。
* 涉及到数据访问/数据操作的时候加锁。
* 多线程默认是异步执行的。