美文网首页
ios面试题

ios面试题

作者: 卡卡罗忒 | 来源:发表于2020-05-17 02:31 被阅读0次

    1 NSobject本质是什么,占用多少内存

    是一个结构体,结构体中包含一个CLass isa指针 isa指针占用8个字节
    NSObjec *objc  占用16个字节 
    用malloc_size 获取指针指向内存空间的大小 为16个字节 ,malloc底层实现 是一个C函数 calloc ,里面处理如果size<16就会分配为16,(所有CFobjec最少占用16个字节 ) 硬性规定,然后ios中分配内粗的大小都是16的倍数
    用class_getinstance获取实力对象为8个字节
    所以一个对象分配空间为16个字节,但是实际利用起来占用为8个
    

    2 一个自定义对象占多少内存

      自定义一个对象
    
    image.png

    对象实际


    image.png

    一个isa指针占用8个字节
    Int类型在oc中占用4个字节
    所以占用16个字节

    3 OC中对象的分类

      Objective-C中的对象,简称OC对象,主要可以分为3种
      1. instance对象(实例对象)
          instance对象就是通过类alloc出来的对象,每次调用alloc都会产生新的instance对象
         instance对象在内存中存储的信息包括
          isa指针
          其他成员变量
    
      2. class对象(类对象)
          实例对象中的isa指针指向的就是类对象
          每个类在内存中有且只有一个class对象
          class对象在内存中存储的信息主要包括
          isa指针
          superclass指针
          类的属性信息(@property)、类的对象方法信息(instance method)
          类的协议信息(protocol)、类的成员变量信息(类型描信息)(ivar)
    
       3. meta-class对象(元类对象) 
          每个类在内存中有且只有一个meta-class对象
          meta-class对象和class对象的内存结构是一样的,但是用途不一样,在内存中存储的信息主要包括
          isa指针
          superclass指针
          类的类方法信息(class method)
    

    4 对象的isa指针指向哪里?

          instance对象的isa指向class对象
          class对象的isa指向meta-class对象
          meta-class对象的isa指向基类的meta-class对象
    

    5 phone继承于mobile 在phone中调用[self class]和调用[super class] 打印是什么

        打印结果都是phone 在[self class]会通过函数objcMessageSend这个函数调用,消息传递过程中 self为类对象objc_Object
        objcet isa指针指向类对象 在类对象catch方法中找对应的函数,找不到就找superclass中的方法,然后一直到基类nsobject中找到方法
        [super closs] 会调用objcMessageSendSuper函数,调用者虽然是super 在运行时中表现为objc_super ,
        然后super中有一个recever,表示为消息的接受者,其实还是self ,然后查找方法是会直接找objc_objcet的类对象的super class,
        也就是跳过当前类对象去向上查找,所以还是phone.
    

    6 mobile中有test([self class])方法,phone中没有,分别用phone和mobile调用test返回是什么

        返回mobile
    

    7 类对象objc_class结构

    image.png

    8 OC的类信息存放在哪里?

          对象方法、属性、成员变量、协议信息,存放在class对象中
          类方法,存放在meta-class对象中
          成员变量的具体值,存放在instance对象
    

    OC中Int类型占4字节,swift中占8个字节,区别

    函数的内存为什么不跟实例变量放在一起(因为函数在内存中只有一份就够了(对象可以重复创建,函数不必))

    相关文章

      网友评论

          本文标题:ios面试题

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