在开发的时候 因为没有好好去了解三者的差异性 一时贪图便捷 一味使用NSThread开启异步线程 线程爆满没有及时关闭销毁 挖了坑吃了亏。
今天就在这里简单写写三个的用法和差异性:
NSThread 封装性最差,主要基于thread使用,方便使用,缺点是需要手动关闭;
GCD基于C的API,代码看起来比较乱(高大上),主要基于task使用;
NSOperation是基于GCD,被封装成NSObject对象使用,主要基于队列使用。
NSThread的使用
NSThread 方法
1.创建:
//需要手动开启
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
[thread start];
//或 自动开启线程
[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];
//或 隐式创建并开启线程
[self performSelectorInBackground:@selector(run) withObject:nil];
②获取主线程和判断是否为主线程
+ (NSThread *)mainThread; // 获得主线程
- (BOOL)isMainThread; // 是否为主线程
+ (BOOL)isMainThread; // 是否为主线程
③或许当前线程和线程名称