美文网首页多线程iOS Developer
4.3 NSThread->2.0 线程属性

4.3 NSThread->2.0 线程属性

作者: 蓝田_Loto | 来源:发表于2016-04-15 14:19 被阅读83次

本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正。


本文相关目录:
==================== 所属文集:4.0 多线程 ====================
4.1 多线程基础->1.0 进程 & 线程
······················ 2.0 多线程简介
4.2 pthread
4.3 NSThread->1.0 创建线程
····················· 2.0 线程属性
····················· 3.0 线程状态/线程生命周期
····················· 4.0 多线程安全隐患
····················· 5.0 线程间通讯和常用方法
4.4 GCD->1.0 GCD简介和使用
·············· 2.0 线程间的通信
·············· 3.0 其他用法
·············· 4.0 GCD 的定时器事件
4.5 NSOperation->1.0 NSOperation简介
························ 2.0 NSOperationQueue
························ 3.0 线程间通信
························ 4.0 自定义NSOperation
4.6 RunLoop - 运行循环
===================== 所属文集:4.0 多线程 =====================


主线程相关方法 :

+ (NSThread *)mainThread; // 获得主线程
- (BOOL)isMainThread; // 是否为主线程
+ (BOOL)isMainThread; // 是否为主线程
NSThread *main = [NSThread mainThread];   // + (NSThread *)mainThread;  获得主线程

[NSThread  isMainThread]; //  + (BOOL)isMainThread;    类方法判断,该方法是否为主线程

[main isMainThread];      //  - (BOOL)isMainThread;   对象方法判断,该对象是否为主线程

其他用法:

(1) currentThread - 获得当前线程 :

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

(2) threadPriority - 线程的调度优先级 :

优先级,是一个浮点数,取值范围从 0~1.0 默认优先级是0.5 值越大,优先级越高

优先级高只是保证 CPU 调度的可能性会高

建议:在开发的时候,不要修改优先级
多线程的目的:是将耗时的操作放在后台,不阻塞主线程和用户的交互!
多线程开发的原则:简单
//返回当前方法所在线程的优先级
+ (double)threadPriority;
举例:[NSThread threadPriority];

//设置线程的优先级
+ (BOOL)setThreadPriority:(double)p;
举例:self.thread1.threadPriority = 1.0;

- (double)threadPriority;//返回当前方法所在线程的优先级
- (BOOL)setThreadPriority:(double)p;//设置线程的优先级

(3) name - 线程的名字 : 在大的商业项目中,通常需要在程序崩溃时,获取程序准确执行所在的线程

- (void)setName:(NSString *)n;   //set 方法
- (NSString *)name;              //get 方法

举例:
thread.name = @"线程A";

(4) stackSize - 栈区大小

默认情况下,无论是主线程还是子线程,栈区大小都是 512K
栈区大小虽然可以设置,但是我们一般都使用系统默认的大小就行了

举例:
[NSThread currentThread].stackSize = 1024 * 1024;

代码示例 :

// 线程属性
- (void)threadProperty {
  NSThread *t1 = [[NSThread alloc] initWithTarget:self
                                         selector:@selector(demo)
                                           object:nil];

  // 1. 线程名称
  t1.name = @"Thread AAA";

  // 2. 优先级
  t1.threadPriority = 0;

  [t1 start];

  NSThread *t2 = [[NSThread alloc] initWithTarget:self
                                         selector:@selector(demo)
                                           object:nil];
  // 1. 线程名称
  t2.name = @"Thread BBB";
  // 2. 优先级
  t2.threadPriority = 1;

  [t2 start];
}

- (void)demo {
  for (int i = 0; i < 10; ++i) {
    // 堆栈大小
    NSLog(@"%@ 堆栈大小:%tuK", [NSThread currentThread],[NSThread currentThread].stackSize / 1024);
  }

   // 模拟崩溃
   // 判断是否是主线程
      if (![NSThread currentThread].isMainThread) {
          NSMutableArray *a = [NSMutableArray array];
          [a addObject:nil];
      }
}

本文源码 Demo 详见 Github
https://github.com/shorfng/iOS_4.0_multithreading.git




作者:蓝田(Loto)
出处: 简书

如果你觉得本篇文章对你有所帮助,请点击文章末尾下方“喜欢”
如有疑问,请通过以下方式交流:
评论区回复微信(加好友请注明“简书+称呼”)发送邮件shorfng@126.com



本文版权归作者和本网站共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

相关文章

  • 4.3 NSThread->2.0 线程属性

    本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正。 本文相关目...

  • 4.3 NSThread->1.0 创建线程

    本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正。 本文相关目...

  • 4.3 NSThread->3.0 线程状态/线程生命周期

    本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正。 本文相关目...

  • 4.3 NSThread->4.0 多线程安全隐患

    本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正。 本文相关目...

  • 4.3 NSThread->5.0 线程间通讯和常用方法

    本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正。 本文相关目...

  • swift多线程

    swift 2.0 和 3.0的多线程的区别 swift 2.0多线程的基础使用 dispatch_async(d...

  • 线程属性

    对线程属性的设置 属性对象创建销毁,继承性,调度策略,优先权,分离状态,栈 初始化/销毁线程的属性对象 使用一个线...

  • 线程编程(二)

    修改线程属性pthread_create 函数的第二个参数——线程的属性,NULL为默认属性 系统默认的属性为 绑...

  • C++ Linux多线程:各种线程属性和对它们做相关操作的函数

    线程属性 pthread_attr_t 结构体定义了一套完整的线程属性: 可以看到,各种线程属性都包含在一个字符数...

  • 4.3 django 模型常用属性

    模型常用属性 常用字段: 在Django中,定义了一些Field来与数据库表中的字段类型来进行映射。以下将介绍那些...

网友评论

    本文标题:4.3 NSThread->2.0 线程属性

    本文链接:https://www.haomeiwen.com/subject/uidnlttx.html