240 发简信
  • 这是我的一些看法:

    同步派发(sync)会尽可能地在当前线程派发任务.但如果在其他队列往主队列同步派发,任务会在主线程执行.
    异步派发(async)也不绝对会另开线程.例如在主线程异步派发到主线程,派发依旧是异步的,任务也会在主线程执行.
    我感觉同步异步的重要区别在于派发方法是否需要等待 block 完成后才能返回.

    无论串行还是并发队列,任务启动顺序都是按照 FIFO 的,只是并发队列允许同一时间有多个任务执行都在执行.

    创建队列

    也可以自己创建并发队列.
    dispatch_queue_create("我是私有串行队列", DISPATCH_QUEUE_SERIAL);
    dispatch_queue_create("我是私有并发队列", DISPATCH_QUEUE_CONCURRENT);

    dispatch_async(dispatch_get_main_queue()) {
    // Swift 中用尾闭包写法感觉更美观.
    }

    关于同步,还有这么个东西:
    dispatch_barrier_async(privateConcurrentQueue, ^{
    // 写入操作会确保队列前面的操作执行完毕才开始,并会阻塞队列中后来的操作.
    });

    dispatch_sync(privateConcurrentQueue, ^{
    // 只要没有写入操作,多个读取操作是相对并行的.
    });

  • @浩然69 :smile:

    iOS中数组的优化

    先写些结论,有空了再分析 iOS使用了类簇模式,比如数据创建NSArray和NSMutableArray时都是通过__NSPlacehodlerArray实现的。 只是在al...

  • 120
    iOS中数组的优化

    先写些结论,有空了再分析 iOS使用了类簇模式,比如数据创建NSArray和NSMutableArray时都是通过__NSPlacehodlerArray实现的。 只是在al...

  • 逗号表达式

    逗号运算符特性: 1.逗号运算符将两个以上的表达式用逗号联起来,2.计算过程为从左到右;3.整个逗号表达式会有一个返回值,是最后一个表达式的值4.逗号运算符的优先级在所有运算...

  • C扩展语法一:语句内嵌表达式

    语句内嵌表达式格式为({xxx});其返回值为最后一个表达式的值花括号内可以是各种表达式,但是最后一个表达式必须是非声明以分号结尾的表达式,比如:最后如果是int test ...

  • GCD会创建多少个线程

    关于GCD队列,系统队列编号有11个,1为主队列,2为管理队列,3保留;4-11为8个全局队列,优先级分别为LOW、DEFAULT、HIGH 和 BACKGROUND,4个队...

  • @流浪的卡尔 很高兴能帮到你

    ios @proterty @synthesize详解

    @proterty @synthesize是为了方便开发,提高开发效率添加的自动生成get和set方法方法。 @property(nonatomic,copy)NSStri...

  • po主理解错了。atomic是绝对安全的。
    我们知道,在64位的操作系统下,所有类型的指针,包括void * 都是占用8个字节的。超过4个字节的基本类型数据都会有线程并发的问题。
    那所有的指针类型都会有这个问题。
    以oc 下的 NSArray * 为例子,如果一个多线程操作这个数据,会有两个层级的并发问题
    1、指针本身
    2、指针所指向的内存

    指针本身也是占用内存的,并且一定是8个字节,第二部分,指针所指向的内存,这个占多少字节就不一定了,有可能非常大,有可能也就1个字节


    所以我们考虑NSArray * array 这个数据array 多线程操作的时候,必须分成两部分来描述,一个是&array这个指针本身,另一个则是它所指向的内存 array
    大家注意下 &array 和 array 的区别 ,其实不用纠结,你就想象现在有两块内存,一块是8字节,一块n字节,8字节里面放的值,就是n字节内存的首地址,

    ok 现在联系上atomic,如果用@property(atomic)NSArray *array 修饰之后,会有什么影响?网上说的很多,不再赘述,我只想从内存的角度来解释这个过程

    首先第一点,你要记住,@property(atomic)NSArray *array 其实修饰的是这个指针,也就是这个8字节内存,跟第二部分数据n字节没有任何关系,被atomic 修饰之后,你不可能随意去多线程操作这个8字节,但是对8字节里面所指向的n字节没有任何限制!这就是所有网络上所说的 atomic 不安全的真相 !!!

    我们来看一下,这能怪atomic? 本身你修饰的是一个指针,并且atomic 已经完美的履行了它的指责,你现在不可能对这个8字节进行无序的多线程操作,这就够了呀!atomic没有任何鸟问题。有问题的是人,你本身并未对n字节做任何的限制,所以把问题怪罪到atomic 上真的是很不合理

  • xcode8 The application does not have a valid signature.

    在我们项目中xcode8真机运行的时候总是出现The application does not have a valid signature. 基本出现的规律是在不修改配置情...

  • (转)Objective-C的方法替换

    原文地址:http://blog.csdn.net/horkychen/article/details/8532087 本文将要讨论Objective-C中的方法替换(met...

  • ios @proterty @synthesize详解

    @proterty @synthesize是为了方便开发,提高开发效率添加的自动生成get和set方法方法。 @property(nonatomic,copy)NSStri...

  • 转:自旋锁 互斥锁 读写锁 递归锁

    转自:http://blog.csdn.net/evilswords/article/details/11816773 这几个锁的概念各有交叉,容易混淆 互斥锁(mutexl...

  • 结构体大小

    主要借鉴博客地址:http://www.cnblogs.com/longlybits/articles/2385343.html一.字节对齐及为什么要对齐:1.结构体对象的起...