分享

送给非科班iOS开发,一份面试题(附答案)

 行者花雕 2021-12-21

iOS行业在经历了过去几年的爆发期后,现在到了一个相对冷静的时期,一个良币驱逐劣币、去伪存真的阶段。只有持续的专注和付出,才能够在激烈的竞争中脱颖而出,成为强者。正如狄更斯所言,“这是一个最坏的时代,也是最好的时代” 

对于这些面试题,不要死记硬背,应该举一反三,深刻理解实现机制(这也是科班和非科班的区别之一)。面试题答案只是参考,如有错误请指正。

如果让你实现属性的weak,如何实现的?

runtime对注册的类会进行布局,对于weak修饰的对象会放入一个hash表中。用weak指向的对象内存地址作为key,当此对象的引用计数为0的时候会dealloc,假如weak指向的对象内存地址是a,那么就会以a为键在这个weak表中搜索,找到所有以a为键的weak对象,从而设置为nil

如果让你来实现属性的atomic,如何实现?

struct objc_method_list{  struct objc_method_list*  method_next; /* 这个变量用来链接另一个单独的方法链表 */  int            method_count;            /* 结构中定义的方法数量 */  struct objc_method method_list[1];      /* 可变长度的结构 */};

分类是如何实现的?它为什么会覆盖掉原来的方法?

因为分类方法加入类中这一操作是在运行期系统加载分类时完成的,运行期系统会把分类中所实现的每一个方法都加入类的方法列表中

  • category的实例方法、协议以及属性添加到类上

  • category的类方法和协议添加到类的metaclass上

category的方法被放到了新方法列表的前面,而原来类的方法被放到了新方法列表的后面,所以category的方法会“覆盖”掉原来类的同名方法。

希望我所分享的经验能对您有所帮助,也希望您终能如愿以偿进入心仪的企业工作。

结交人脉

最后推荐个我的高级iOS交流群:1001906160 ,有一个共同的圈子很重要,结识人脉!里面都是iOS开发,全栈发展,欢迎入驻,共同进步!(群内会免费提供一些群主收藏的免费学习书籍资料以及整理好的几百道面试题和答案文档!)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多