美文网首页
一句话笔记(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