小知识点

isa指针

isa指针指的就是类本身自己 实例对象经过对象的isa指针指向类 是一个class 类型的指针,每一个实例对象都有 isa 指针,他指向对象的类编程

Class 是一个 objc_class 结构类型的指针, id是一个 objc_object 结构类型的指针.数组

https 加密

非对称加密交换秘钥,对称通讯安全

服务端 生成一对私钥和公钥 
发送密文的一方使用对方的公钥进行加密处理“对称的密钥”,
而后对方用本身的私钥解密拿到“对称的密钥”,
这样能够确保交换的密钥是安全的前提下,使用对称加密方式进行通讯
复制代码

链式编程

什么是链式编程,一句话就是方法返回值必需要有方法的调用者!markdown

weak 原理说明

一个对象可能会被屡次弱引用,当这个对象被销毁时,咱们须要找到这个对象的全部弱引用,因此咱们须要将这些弱引用的地址(即指针)放在一个容器里(好比数组)。当对象再也不被强引用时须要销毁的时候,能够在SideTable中 经过这个对象的地址找到引用值,清空引用值。同时, SideTable结构中还有weak_table_t结构,该结构也是一个散列表,key 为对象地址,value 为一个数组,里面保存着指向该对象的全部弱指针。当对象释放的时候,先清空引用哈希表RefcountMap对应的引用值,遍历弱指针数组,依次将各个弱指针置为 nil。
复制代码

blog.csdn.net/u013378438/…ide

内存(堆内存)回收是什么意思

NSObject *obj = [[NSObject alloc] init]
复制代码

代码对应的内存布局以下,obj 指针存在于栈取,obj 对象存在于堆区。obj 指针的回收由栈区自动管理,堆区的内存须要开发者本身管理(MRC)状况。所谓的堆内存回收并非指将 obj 对象占有的内存给挖去或是将空间数据清空为0,而是指 obj 对象本来占有的空间能够被其余人利用(即其余指针能够指向该空间)。其余指针指向该空间时,从新初始化该空间,将空间原有数据清零。函数

签名机制

www.jianshu.com/p/fe8212d25…oop

[super class]

super 调用底层会转换为objc_msgSendSuper函数的调用,objc_msgSendSuper 函数接收 2 个参数 objc_super 结构体和 SEL ,objc_super结构以下:布局

struct objc_super {
    __unsafe_unretained _Nonnull id receiver; // 消息接收者
    __unsafe_unretained _Nonnull Class super_class; // 消息接收者的父类
};
复制代码

[super class] 在调用过程当中,底层转化为 objc_msgSendSuper({self, [Animal class]}, @selector(class)); ,同 objc_msgSend 函数相比至关于多了第二个参数,但消息接收者仍然是 self ,因此打印结果为 Cat。加密

因而可知 当咱们调用[self class] 时候实际上编译器最终给咱们转成 objc_msgSend(self,@selector(class)) , 消息的接收者是当前所在类的实例对象 , 这个时候就会去 self 所在类 Student 去查找 class 方法 , 若是当前类 Student 没有 class 会向Student 父类 Person 类找 class 方法, 若是 Person 类也没有找到 class 方法,最终会找到最顶级父类 NSObject 的 class 方法, 最终找到 NSObject 的 class 方法 ,并调用了object_getClass(self) ,因为消息接收者是 self 当前类实例对象, 因此最终 [self class]输出 Studentspa

相关文章
相关标签/搜索