知识点总结

作者: _兜兜转转_ | 来源:发表于2019-04-12 14:04 被阅读0次
  • 关联对象是一个全局的manger管理的 一个hash表,不是依附于实例对象的,在类别中新建property,在class 中只有声明set/get方法,没有实现,需要自己在cateroty中手动实现,实现方式1:静态变量;实现方式2是:用关联对象手动set和get在AssociationsManager管理的hash表中。在实例dealloc中,会执行if (assoc) _object_remove_assocations(obj);来销毁释放对象。
  • 销毁对象的时候 销毁系统维护的weak表方法是:obj->clearDeallocating();
objc_object::rootDealloc()
{
if (isTaggedPointer()) return;  // fixme necessary?

    if (fastpath(isa.nonpointer  &&  
                 !isa.weakly_referenced  &&  //weak表
                 !isa.has_assoc  &&  //关联对象
                 !isa.has_cxx_dtor  &&  //是否有C++析构函数,如果没有,释放时会更快
                 !isa.has_sidetable_rc))//有没有父类引用
    {
        assert(!sidetable_present());
        free(this);
    } 
    else {
        object_dispose((id)this);//销毁操作
    }
}
  • 局部变量都会被block捕获,自动变量是值捕获,静态变量为地址捕获。全局变量则不会被block捕获。
  • block 不能修改aotu 变量,因为int是值传递,不是地址,不能修改。copy strong修饰的block是讲block从栈区拷贝到了堆区。
    全局变量能修改,因为传递进去的是指针地址。
  • __block修饰的int类型会再block内部生成一个结构体,赋值和取值用age-> __forwarding来实现。内存地址是自己的结构体的内存地址,age的地址其实是外部的内存地址结构体包含int变量的内存大小和内存地址,销毁block的时候将结构体传给dispose进行引用-1操作
  • global malloc stack 三种block 全局的是没有访问aotu变量的,copy 和dispatch 是在堆区的,stack是栈区的,访问了auto变量的block,执行完就销毁。
    block内存管理

    复制到堆上边 修改int变量
对象类型复制copy操作会把stack转换成mallocblock,arc情况下 copy自动转换到堆上然后修改值
对象类型复制到堆上然后修改值
建立起一个TCP连接需要经过“三次握手”:

第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

[图片上传失败...(image-bc4c1e-1555049052609)]

  • runtime class 存储method sel 在cache中使用 sel&mask,保证不会内存溢出,当容量小余3/4时候进行扩容,容量为原来的2倍。
  • runtime 消息转发机制
    汇编语言中_objc_msgSend的运行流程
  • OC中的方法调用其实都是转成了objc_msgSend函数的调用,给receiver(方法调用者)发送了一条消息(selector方法名)。方法调用过程中也就是objc_msgSend底层实现分为三个阶段:
    1.消息发送[class和instance寻找sel]
    2.动态方法解析[reslo方法可以动态添加method]
    3.消息转发[method_sign 方法签名可以返回自己想要的实例,然后该实例调用方法]
    详情见博客
消息查找阶段
消息转发阶段

相关文章

网友评论

    本文标题:知识点总结

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