zoukankan      html  css  js  c++  java
  • Runtime相关

    对象的isa 指针指向哪里?isa 指针有哪两种类型?

      isa 等价于 is kind of

     

    • 实例对象 isa 指向类对象
    • 类对象 isa 指向元类对象
    • 元类对象的 isa 指向元类的基类
    • isa 有两种类型

      • 纯指针,指向内存地址
      • NON_POINTER_ISA,除了内存地址,还存有一些其他信息

    1.一个objc对象的isa的指针指向什么?有什么作用?

       指向他的类对象,从而可以找到对象上的方法.

     

     向一个nil对象发送消息将会发生什么?

      如果向一个nil对象发送消息,首先在寻找对象的isa指针时就是0地址返回了,所以不会出现任何错误。也不会崩溃。

    向一个对象发送消息时,发生了什么?

      向一个对象发送消息时,runtime会根据对象的isa指针找到该对象实际所属的类,然后在该类中的方法列表以及其父类方法列表中寻找方法运行,如果一直到根类还没找到,转向拦截调用,走消息转发机制,一旦找到 ,就去执行它的实现IMP 。

    什么是method swizzling(俗称黑魔法)

      简单说就是进行方法交换

      在Objective-C中调用一个方法,其实是向一个对象发送消息,查找消息的唯一依据是selector的名字。利用Objective-C的动态特性,可以实现在运行时偷换selector对应的方法实现,达到给方法挂钩的目的。
      每个类都有一个方法列表,存放着方法的名字和方法实现的映射关系,selector的本质其实就是方法名,IMP有点类似函数指针,指向具体的Method实现,通过selector就可以找到对应的IMP。
      换方法的几种实现方式

    • 利用 method_exchangeImplementations 交换两个方法的实现
    • 利用 method_setImplementation 来直接设置某个方法的IMP
    • 利用 class_replaceMethod替换方法的实现

    runtime如何实现weak变量的自动置ni  

      runtime 对注册的类会进行布局,对于 weak 修饰的对象会放入一个 hash 表中。 用 weak 指向的对象内存地址作为key,当此对象的引用计数为0的时候会 dealloc,假如 weak 指向的对象内存地址是a,那么就会以a为键, 在这个 weak表中搜索,找到所有以a为键的 weak 对象,从而设置为 nil
  • 相关阅读:
    ubuntu卸载vsftpd出错
    Eclipse: the import java.util cannot be resolved
    C# webBrowser 获取元素class属性值
    获取 user-agents
    Python获取当前年月日
    使用pip安装Scrapy出错
    使用pip安装Scrapy出错
    VMware全屏时, 隐藏上方工具栏横条
    HDFS 常用命令
    简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行
  • 原文地址:https://www.cnblogs.com/jiefangzhe/p/12606428.html
Copyright © 2011-2022 走看看