2019年2月19日
摘要: 首先看个产生死锁的代码-(void)syncMain{ //获得主队列 dispatch_queue_t queue = dispatch_get_main_queue(); NSLog(@"start"); //同步函数 dispatch_sync(queue, ^{ NSLog(@" %@",[ 阅读全文
posted @ 2019-02-19 22:07 大圣ios博客 阅读(469) 评论(0) 推荐(0) 编辑
  2019年2月16日
摘要: GCD核心概念: 1,任务和队列。 任务:要做什么 队列:存放任务。 GCD使用步骤: 1,创建队列 2,封装任务,把任务添加到队列中。 封装任务的函数: 同步函数: dispatch_sync 该函数不具备开辟线程的能力,不能开辟线程。 任务执行的方式: 同步 异步函数:dispatch_asyn 阅读全文
posted @ 2019-02-16 21:24 大圣ios博客 阅读(628) 评论(0) 推荐(0) 编辑
摘要: 开辟新的线程: [NSThread detachNewThreadSelector:@selector(download) toTarget:self withObject:nil]; [self performSelectorInBackground:@selector(download) wit 阅读全文
posted @ 2019-02-16 20:27 大圣ios博客 阅读(87) 评论(0) 推荐(0) 编辑
  2019年2月15日
摘要: nonatomic 非线程安全的,适合内存小的移动设备,内部不会加锁。 atomic 线程安全的,需要消耗大量的资源,内部会对setter方法加锁 开发中的建议: 1,所有的属性都声明为 nonatomic (如果不声明,默认是atomic) 2,尽量避免多线程抢夺同一资源 3,尽量将加锁,资源抢夺 阅读全文
posted @ 2019-02-15 23:59 大圣ios博客 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 多条线程抢夺同一资源时,经常需要加锁,保证同一时间只能有一条线程操作一个资源。 同步锁就是互斥锁 格式:@synchronized (token) { } token:锁对象,要使用全局的对象,建议使用self {} 要加锁的代码段 注意点:加多把锁是无效的。 要注意加锁的位置。 互斥锁的优点: 能 阅读全文
posted @ 2019-02-15 23:24 大圣ios博客 阅读(994) 评论(0) 推荐(0) 编辑
摘要: 线程从生到死有几种状态: 创建(new) 就绪start 运行running 阻塞sleep 死亡dead cpu调用线程是从可调度线程池中调用, 当线程阻塞时会移出可调度线程池。 线程是不能直接从阻塞状态直接变成运行状态的, 需要先变成就绪状态,当cpu调用该线程时, 就会变成运行状态。 控制线程 阅读全文
posted @ 2019-02-15 22:00 大圣ios博客 阅读(1520) 评论(0) 推荐(0) 编辑
  2019年2月14日
摘要: @interface ViewController () @property (nonatomic, strong) NSString *str1; @property (nonatomic, copy) NSString *str2; @end @implementation ViewContro 阅读全文
posted @ 2019-02-14 15:58 大圣ios博客 阅读(1794) 评论(0) 推荐(0) 编辑
  2019年2月13日
摘要: 多线程: 串行->针对一个线程中有多个任务,按顺序执行。 并行->多个线程的执行情况,同时执行。 多线程优点: 提高程序的性能 缺点: 需要开销,程序更加复杂。 多线程技术方案: pthread 适用于unix, Linux, Windows,可跨平台 NSThread 面向对象,简单易用 GCD 阅读全文
posted @ 2019-02-13 17:08 大圣ios博客 阅读(168) 评论(0) 推荐(0) 编辑
摘要: Cpu操作内存, 通过寄存器操作,不是直接操作内存。 高级语言编译成汇编语言, 汇编语言再编译成机器语言,机器语言再运行到计算机。 汇编语言与机器语言 是一一对应的。可以编译与反编译。 高级语言可以编译成汇编或机器语言,但是汇编几乎不可能还原成高级语言。 阅读全文
posted @ 2019-02-13 10:53 大圣ios博客 阅读(164) 评论(0) 推荐(0) 编辑
  2018年12月28日
摘要: swift 特性, 可以定义泛型类型 func SwapTwoValues <T>(value1: inout T, value2: inout T) { let p = value1 value1 = value2 value2 = p } 参数为泛型, var a1 = "hello" var 阅读全文
posted @ 2018-12-28 10:20 大圣ios博客 阅读(505) 评论(0) 推荐(0) 编辑