美文网首页
一句话笔记(45) (小概念)

一句话笔记(45) (小概念)

作者: 天空中的球 | 来源:发表于2020-04-29 22:22 被阅读0次

    一句话笔记,某段时间内遇到或看到的某个可记录的点。

    • 用短的话说明 Runtime, Runloop Block 概念
    • strong 和 copy 的区别,什么时候真正用到 atomic ?
    • NSOperationQueue 如何保证调度线程的安全?
    一、用短的话说明 Runtime, Runloop 概念
    • Runtime 是一套 C语言API,很好的体现了其运行时机制, 其中最主要的是"消息机制", 我们知道C语言的函数调用,在编译时期就决定调用那个函数了,OC在编译时期并不能决定真正调用那个函数,只有在真正运行的时候才会根据函数名称找到对应函数来调用。
    • Runloop 是通过内部维护的事件循环来对事件或消息进行管理的一个对象。
    • Block 是封装了函数调用以及函数调用环境OC对象
    struct Block_layout {
       void *isa;
       int flags;
       int reserved; 
       void (*invoke)(void *, ...);
       struct Block_descriptor *descriptor;
       // imported variables
    };
    
    struct Block_descriptor {
       unsigned long int reserved;
       unsigned long int size;
       void (*copy)(void *dst, void *src);
       void (*dispose)(void *);
    };
    
    1.isa指针: 所有对象都有该指针,用于实现对象相关的功能。
    2.flags: 附加标识位, 在copy和dispose等情况下可以用到。
    3.reserved:保留变量。
    4.invoke: 函数指针,指向 block的实现代码, 也可以说是函数调用地址。
    5.descriptor: 表示该 block的附加描述信息,主要是 size,以及 copy和 dispose函数的指针。这两个辅助函数在拷贝及丢弃块对象时运行, 其中会执行一些操作, 比方说, 前者要保留捕获的对象,而后者则将之释放。
    6.variables: 捕获的变量,block能够访问它外部的局部变量,就是因为将这些变量复制到了结构体中。
    
    二、 strong 和 copy 的区别,什么时候真正用到 atomic ?
    • strong 和 copy 都会使引用计数加1,但 strong 是两个指针指向同一个内存地址,copy是在内存中拷贝一份对象,两个指针指向不同的内存地址。
    • 在不可变对象之间进行转换,strong 与copy 作用是一样的,但是如果在不可变与可变之间进行操作,那么推荐用 copy。
    • 使用atomic 修饰属性,编译器会设置默认读写方法为原子读写,并使用互斥锁添加保护。
    @property (readonly) NSInteger maximumFramesPerSecond 
    
    • 某些只读的对象。
    三、NSOperationQueue 如何保证调度线程的安全?

    NSOperationQueue:可以勉强的叫做线程队列的,它是专门管理添加到他里面 NSOperation,然后根据情况,开启线程执行对应的“操作”。

    • 如何保证安全
      在 NSOperation 实例在多线程上执行是安全的,不需要添加额外的锁。 就是可以说 NSOperation 本身是线程安全的。

    • 如何监听状态
      通过 KVO 属性的观察,NSOperation类 对其一些属性是键值编码(KVC)和键值观察(KVO)兼容的。

    笔记参考: NSOperation的进阶使用和简单探讨

    相关文章

      网友评论

          本文标题:一句话笔记(45) (小概念)

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