美文网首页
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