美文网首页
2022-05-24面试题汇总

2022-05-24面试题汇总

作者: TsingQue | 来源:发表于2022-05-26 11:56 被阅读0次

    1.字节跳动

    1.哪些属性使用copy 为什么
    NSString,NSArray,NSDictory,Block

    1> 当源字符串是NSString时,由于是不可变字符串,所以不管是实用strong还是copy修饰,都是指向原来的对象,copy只是做了一次浅拷贝。
    2> 当源字符串是NSMutableString时,strong只是将源字符串的引用计数+1,而copy则是对源字符串做了次深拷贝,从而生成了一个新的对象,并且copy的对象指向这个新对象。
    所以,如果源字符串是NSMutableString时,实用strong只会增加引用计数,但copy会执行一次深拷贝,会造成不必要的内存浪费。而如果源字符串是NSString时,strong和copy效果一样,就不会有这个问题。
    我们一般声明NSString时,也不希望它改变,所以一般情况下,建议使用copy,这样可以避免NSMutableString带来的错误。

    Block的内存地址显示在栈区,我们知道:栈区的特点就是创建的对象随时可能被销毁,一旦被销毁后续再次调用空对象就可能会造成程序崩溃,但是在对block进行copy后,block存放在堆区.所以在使用Block属性时使用Copy修饰

    2.weak的原理

    weak 实现原理的概括

    Runtime维护了一个weak表,用于存储指向某个对象的所有weak指针。weak表其实是一个hash(哈希)表,Key是所指对象的地址,Value是weak指针的地址(这个地址的值是所指对象指针的地址)数组。

    weak 的实现原理可以概括一下三步:

    1、初始化时:runtime会调用objc_initWeak函数,初始化一个新的weak指针指向对象的地址。

    2、添加引用时:objc_initWeak函数会调用 objc_storeWeak() 函数, objc_storeWeak() 的作用是更新指针指向,创建对应的弱引用表。

    3、释放时,调用clearDeallocating函数。clearDeallocating函数首先根据对象地址获取所有weak指针地址的数组,然后遍历这个数组把其中的数据设为nil,最后把这个entry从weak表中删除,最后清理对象的记录。

    https://www.jianshu.com/p/13c4fb1cedea

    3.block的本质

    这说明上面定义的这个block的类型是NSStackBlock,并且它最终继承自NSObject也说明Block的本质是OC对象。

    Block有三种类型,分别是NSGlobalBlock,MallocBlock,NSStackBlock。

    这三种类型的Block对象的存储区域如下:

    <colgroup><col style="width: 70px;"><col style="width: 70px;"></colgroup>
    |

    |

    对象的存储域

    |
    |

    NSStackBlock

    |

    |
    |

    NSGlobalBlock

    |

    程序的数据区域(.data区)

    |
    |

    NSMallocBlock

    |

    |

    懒加载介绍-

    Lazy,谁懒?当然是计算机偷懒。通常用法,你有一个NSArray的property,但是你不在初始化方法里为其alloc/init,它就只是一个指针,不会占用内存。然后你写了此property的访问器,在访问器里判断此property的指针是否为空,若为空,就alloc/init,这时才真正生成这个NSArray。这样子达到的效果就是,除非这个NSArray被使用,否则它永远不会真正生成,也就不会占用内存。计算机的偷懒行为可能减少内存占用,何乐为不为?其他LazyLoad的思想都是这样:拖到最后一刻,万不得已了,才开始占用资源,这在iPhone这种内存较少的设备上是很有必要的。

    4.loaded和initialize区别。如果在load中调用initialize会有什么问题。initialize会 不会有可能在load之前调用

    https://www.jianshu.com/p/c4e456f6efc4

    5.sel.imp.Mathod 分别是什么。SEL本质是什么

    https://blog.csdn.net/qq_42792413/article/details/107879429

    6.类的本质

    https://blog.csdn.net/oldfish_C/article/details/105151309

    7.继承和分类,方法的覆盖关系。

    https://blog.csdn.net/lyxleft/article/details/80590957

    8.fishhook怎么找到C函数的地址

    https://www.jianshu.com/p/fa31e76549de

    9.怎么hook block 的事件

    https://www.jianshu.com/p/bc44e8338c98

    10.离屏渲染

    https://www.jianshu.com/p/cff0d1b3c915

    字节跳动2面

    weak 的实现方式

    https://www.jianshu.com/p/13c4fb1cedea

    引用计数的存储方式

    https://www.jianshu.com/p/4bd96efedd09

    Category的相关问题

    https://www.jianshu.com/p/ccbd2a07db1f

    内存管理的相关内容

    https://www.jianshu.com/p/40ec2cae2f11

    相关文章

      网友评论

          本文标题:2022-05-24面试题汇总

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