面试经典题型集锦
文章平均质量分 72
收集整理iOS相关经典面试题型以及各类大厂、名厂的面试题型的解题思路和处理策略,深入分析其原理,并用相关的示例加以解释,使其更易理解和学习。
╰つ栺尖篴夢ゞ
本人毕业于计算机技术专业,从事iOS高级开发,专注于iOS/MacOS内核/汇编/源码/架构/算法等相关技术的开发学习,同时热爱人工智能、OpenGL/ES、云原生等技术,CSDN博客专家与原力计划作者,华为云云享专家与特约博主,阿里云专家博主,荣获CSDN iOS领域优质创作者、2022年度博客之星移动领域TOP 3、2022年度博客之星TOP 16、AI创想秀邂逅“华为云ModelArts”征文大赛一等奖、CSDN第一届猿创征文优质博文奖,以及多项优秀TOP博文、CSDN开源挑战赛优秀奖等。
展开
-
C++经典面试题之深入解析内存对齐
众所周知,为了保证每个对象拥有彼此独立的内存地址,C++空类的内存大小为1字节。而非空类的大小与类中非静态成员变量和虚函数表的多少有关。其中,类中非静态成员变量的大小则与编译器的位数以及内存对齐的设置有关。原创 2023-04-19 15:20:41 · 927 阅读 · 0 评论 -
iOS经典面试题之深入分析“内存平移”的原理
一、抛砖引玉现在有一个YDWPerson类 ,其中有一个属性 name 和一个实例方法saySomething,如下: @interface YDWPerson : NSObject @property (nonatomic, copy) NSString *name; - (void)saySomething; @end @implementation YDWPerson - (void)saySomething { NSLog(@"%s",__func__);原创 2021-03-20 20:48:53 · 10968 阅读 · 2 评论 -
iOS经典面试题之深入解析类Class的iskindOfClass与isMemberOfClass的底层原理
isa 指针的作用对象的isa指向类,类的isa指向元类(meta class),元类isa指向元类的根类,isa 帮助一个对象找到它的方法;isa 是一个Class 类型的指针. 每个实例对象有个isa的指针,他指向对象的类,而C lass 里也有个isa的指针, 指向 meteClass(元类),元类保存了类方法的列表。当类方法被调用时,先会从本身查找类方法的实现,如果没有,元类会向他父类查找该方法。同时注意的是:元类(meteClass)也是类,它也是对象。元类也有isa指针,它的isa指针原创 2020-09-15 23:40:06 · 7252 阅读 · 1 评论 -
iOS经典面试题之深入解析runtime是如何实现weak变量的自动置nil
一、weak 属性特点weak 表明该属性定义了一种“非拥有关系” (nonowning relationship);为 weak 属性设置新值时,设置方法既不保留新值,也不释放旧值;同 assign 类似,然而在属性所指的对象释放时候,属性值也会清空(nil out)。二、runtime 如何实现 weak 属性① 实现步骤初始化时:runtime 会调用 objc_initWeak 函数,初始化一个新的 weak 指针指向对象的地址。添加引用时:objc_initWeak 函数会调用原创 2021-03-20 21:35:06 · 695 阅读 · 1 评论 -
iOS经典面试题之分析GCD的dispatch_group任务执行问题
① dispatch_group 异步执行任务现有以下调度组 dispatch_group 执行多个任务,将 dispatch_group_notify 放在调度组异步执行任务,那么它们的任务执行顺序是怎么样的呢? dispatch_group_t group = dispatch_group_create(); dispatch_queue_t queue = dispatch_get_global_queue(0, 0); dispatch_group_enter(group);原创 2021-04-06 02:59:50 · 2998 阅读 · 1 评论 -
iOS经典面试题之分析self class与super class的区别和底层原理
一、区别与联系[self class] 就是发送消息 objc_msgSend,消息接收者是 self,方法编号 class;[super class] 本质就是 objc_msgSendSuper,消息的接收者是 self,方法编号 class,在运行时,底层调用的是 _objc_msgSendSuper2;objc_msgSendSuper2 会更快,会直接跳过 self 的查找。二、代码分析现有一个 YDWTeacher 类,继承于 YDWPerson 类,在 init 打印 [sel原创 2021-04-07 01:36:20 · 4216 阅读 · 1 评论 -
iOS经典面试题之使用runtime associate方法关联的对象释放及dealloc底层原理
一、题目分析使用 runtime associate 方法关联的对象,需要在主对象 dealloc 的时候释放吗?无论在 MRC 下还是 ARC 下均不需要,被关联的对象在生命周期内要比对象本身释放的晚很多,它们会在被 NSObject - dealloc 调用的 object_dispose() 方法中释放。调用 release :引用计数变为零,对象正在被销毁,生命周期即将结束,不能再有新的 __weak 弱引用,否则将指向 nil,调用 [self dealloc]。父类调用 dealloc原创 2021-04-07 02:30:22 · 11167 阅读 · 1 评论 -
iOS经典面试题之深入分析block相关高频面试题
一、前言本文重点来研究一下 objc 的 block,并具体分析以下面试题目:block 的内部实现,结构体是什么样?block 是类吗?有哪些类型?一个 int 变量被 __block 修饰与否的区别?block 的变量如何截获?block 在修改 NSMutableArray,需不需要添加 __block?block 怎么进行内存管理?block 可以用 strong 修饰吗?解决循环引用时,为什么要用 __strong、__weak原创 2021-11-15 21:50:59 · 28974 阅读 · 2 评论 -
iOS经典面试题之深入解析分类Category的本质以及如何被加载
Category 是 Objective-C 2.0 之后添加的语言特性,Category 的主要作用是为已经存在的类添加方法。extension 看起来很像一个匿名的 Category,但是 extension 和有名字的 Category 几乎完全是两个东西。extension 在编译期决议,它就是类的一部分,在编译期和头文件里的 @interface 以及实现文件里的 @implement 一起形成一个完整的类,它伴随类的产生而产生亦随之一起消亡。............原创 2022-08-25 21:26:01 · 1046 阅读 · 0 评论 -
iOS经典面试题之深入解析objc对象的内存空间、数据结构以及isa指针的理解
一、objc 对象的 isa 的指针指向什么?有什么作用?二、一个 NSObject 对象占用多少内存空间?三、实例对象的数据结构四、类对象的数据结构五、class_rw_t 的理解六、class_ro_t 的理解原创 2022-08-29 14:49:33 · 1317 阅读 · 0 评论 -
iOS经典面试题之深入解析Runtime如何通过selector寻找对应的IMP地址
类对象中有类方法和实例方法的列表,列表中记录着方法的名词、参数和实现,而 selector 本质就是方法名称,runtime 通过这个方法名称就可以在列表中找到该方法对应的实现。objc_class 的底层定义声明了一个指向 struct objc_method_list 指针的指针,可以包含类方法列表和实例方法列表。......原创 2022-08-29 21:40:04 · 987 阅读 · 0 评论 -
iOS经典面试题之深入分析图像的解码渲染与基本原理
UlImage 是 iOS 中处理图像的高级类,创建一个 UlImage 实例只会加载 Data Buffer,将图像显示到屏幕上才会触发解码,也就是 Data Buffer 解码为 Image Buffer,Image Buffer 也关联在 Ullmage 上。Ullmage 关联的图像是否已解码对外部是不透明的,没有办法判断,其实在日常的内存消耗来讲,图片的渲染是特别消耗内存的。接下来来探究一下究竟是为什么?............原创 2022-08-29 19:55:08 · 2239 阅读 · 0 评论 -
C语言经典面试题之深入解析 字符串拷贝的 sprintf、strcpy和memcpy使用与区别
sprintf 指的是字符串格式化命令,是把格式化的数据写入某个字符串中,即发送格式化输出到 string 所指向的字符串,直到出现字符串结束符 '\0' 为止。原创 2021-09-19 18:18:05 · 6485 阅读 · 2 评论 -
C++经典面试题之深入解析const修饰指针的作用
我们知道,当一个变量用 const 修饰后就不允许再改变它的值,那么如果在定义指针变量的时候用 const 修饰会怎样呢?当用 const 进行修饰时,根据 const 位置的不同有三种作用,原则是:谁被修饰谁的内容就不可变,其它的都可变。原创 2023-02-03 14:02:13 · 1246 阅读 · 4 评论 -
C++经典面试题之深入解析list、vector和deque的联系和区别
List 封装了链表,Vector 封装了数组,list 和 vector 得最主要的区别在于 vector 使用连续内存存储的,它支持 [] 运算符,而 list 是以链表形式实现的,不支持 []。Vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入速度很快。List 对于随机访问速度慢得多,因为可能要遍历整个链表才能做到,但是对于插入就快的多了,不需要拷贝和移动数据,只需要改变指针的指向就可以。原创 2023-04-17 14:32:10 · 655 阅读 · 0 评论 -
C++经典面试题之深入解析带虚函数空类的内存大小
本文详细地分析了空类、虚函数、静态数据成员、普通成员函数、普通继承、虚拟继承等内存中分配中的大小,并分析其内存分配的原因和原理。原创 2023-04-17 16:50:36 · 628 阅读 · 0 评论 -
C++经典面试题之深入解析智能指针unique_ptr的实现原理与自定义实现
unique_ptr 独享它指向的对象,也就是说,同时只有一个 unique_ptr 指向同一个对象,当这个 unique_ptr 被销毁时,指向的对象也随即被销毁。这也是它和 shared_pt r不一样的地方,它不需要做引用计数,也不可以被第二个人引用,只有它自己。unique_ptr 作为一个类的成员变量,这个变量只在本类使用,不会被赋值给其他类,也不会作为参数传递给某个函数;在一个函数作为局部变量,使用完就不用再管,函数结束,自动释放托管资源。原创 2023-04-18 10:32:21 · 1577 阅读 · 0 评论