iOS大厂面试最常见问题汇总

基础相关

  1. 什么是ARC?
  2. block一般用那个关键字修饰,为什么?
  3. 用@property声明的NSString(或NSArray,NSDictionary)经常使用copy关键字,为什么?如果改用strong关键字,可能造成什么问题?
  4. @property 的本质是什么?ivar、getter、setter 是如何生成并添加到这个类中的。
  5. 分别写一个setter方法用于完成
    @property (nonatomic,retain)NSString *name
    @property (nonatomic,copy) NSString *name
  6. 说说assign vs weak,_block vs _weak的区别
  7. 请说出下面代码是否有问题,如果有问题请修改?
@autoreleasepool {
        for (int i=0; i[largeNumber; i++) { (因识别问题,该行代码中尖括号改为方括号代替)
            Person *per = [[Person alloc] init];
            [per autorelease];
        }
    }
  1. 请问下面代码是否有问题,如有问题请修改?
@autoreleasepool {
        NSString *str = [[NSString alloc] init];
        [str retain];
        [str retain];
        str = @"jxl";
        [str release];
        [str release];
        [str release];
}
  1. 什么情况下使用weak关键字,相比assign有什么不同?什么情况使用weak关键字?
    11.内存管理语义(assign、strong、weak等的区别)
    参考总结

runtime相关问题

结构模型

  1. 介绍下runtime的内存模型(isa、对象、类、metaclass、结构体的存储信息等)
  2. 为什么要设计metaclass
  3. class_copyIvarList & class_copyPropertyList区别
  4. class_rw_t 和 class_ro_t 的区别
  5. category如何被加载的,两个category的load方法的加载顺序,两个category的同名方法的加载顺序
  6. category & extension区别,能给NSObject添加Extension吗,结果如何
  7. 消息转发机制,消息转发机制和其他语言的消息机制优劣对比
  8. 在方法调用的时候,方法查询-> 动态解析-> 消息转发 之前做了什么
  9. IMP、SEL、Method的区别和使用场景
  10. load、initialize方法的区别什么?在继承关系中他们有什么区别
  11. 说说消息转发机制的优劣

参考总结

内存管理

  1. weak的实现原理?SideTable的结构是什么样的
  2. 关联对象的应用?系统如何实现关联对象的
  3. 关联对象的如何进行内存管理的?关联对象如何实现weak属性
  4. Autoreleasepool的原理?所使用的的数据结构是什么
  5. ARC的实现原理?ARC下对retain & release做了哪些优化
  6. ARC下哪些情况会造成内存泄漏

参考总结

其他

  1. Method Swizzle注意事项
  2. 属性修饰符atomic的内部实现是怎么样的?能保证线程安全吗
  3. iOS 中内省的几个方法有哪些?内部实现原理是什么
  4. class、objc_getClass、object_getclass 方法有什么区别?

NSNotification相关

苹果并没有开源相关代码,但是可以读下GNUStep的源码,基本上实现方式很具有参考性

  1. 实现原理(结构设计、通知如何存储的、name&observer&SEL之间的关系等)
  2. 通知的发送时同步的,还是异步的
  3. NSNotificationCenter接受消息和发送消息是在一个线程里吗?如何异步发送消息
  4. NSNotificationQueue是异步还是同步发送?在哪个线程响应
  5. NSNotificationQueuerunloop的关系
  6. 如何保证通知接收的线程在主线程
  7. 页面销毁时不移除通知会崩溃吗
  8. 多次添加同一个通知会是什么结果?多次移除通知呢
  9. 下面的方式能接收到通知吗?为什么
// 发送通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:) name:@"TestNotification" object:@1];
// 接收通知
[NSNotificationCenter.defaultCenter postNotificationName:@"TestNotification" object:nil];

参考总结

Runloop & KVO

runloop
  1. app如何接收到触摸事件的
  2. 为什么只有主线程的runloop是开启的
  3. 为什么只在主线程刷新UI
  4. PerformSelector和runloop的关系
  5. 如何使线程保活
KVO
  1. 实现原理
  2. 如何手动关闭kvo
  3. 通过KVC修改属性会触发KVO么
  4. 哪些情况下使用kvo会崩溃,怎么防护崩溃
  5. kvo的优缺点

参考总结

Block

  1. block的内部实现,结构体是什么样的
  2. block是类吗,有哪些类型
  3. 一个int变量被 __block 修饰与否的区别?block的变量截获
  4. block在修改NSMutableArray,需不需要添加__block
  5. 怎么进行内存管理的
  6. block可以用strong修饰吗
  7. 解决循环引用时为什么要用__strong、__weak修饰
  8. block发生copy时机
  9. Block访问对象类型的auto变量时,在ARC和MRC下有什么区别

参考总结

多线程

主要以GCD为主

  1. iOS开发中有多少类型的线程?分别对比
  2. GCD有哪些队列,默认提供哪些队列
  3. GCD有哪些方法api
  4. GCD主线程 & 主队列的关系
  5. 如何实现同步,有多少方式就说多少
  6. dispatch_once实现原理
  7. 什么情况下会死锁
  8. 有哪些类型的线程锁,分别介绍下作用和使用场景
  9. NSOperationQueue中的maxConcurrentOperationCount默认值
  10. NSTimer、CADisplayLink、dispatch_source_t 的优劣

视图&图像相关

  1. AutoLayout的原理,性能如何
  2. UIView & CALayer的区别
  3. 事件响应链
  4. drawrect & layoutsubviews调用时机
  5. UI的刷新原理
  6. 隐式动画 & 显示动画区别
  7. 什么是离屏渲染
  8. imageName & imageWithContentsOfFile区别
  9. 多个相同的图片,会重复加载吗
  10. 图片是什么时候解码的,如何优化
  11. 图片渲染怎么优化
  12. 如果GPU的刷新率超过了iOS屏幕60Hz刷新率是什么现象,怎么解决

性能优化

  1. 如何做启动优化,如何监控
  2. 如何做卡顿优化,如何监控
  3. 如何做耗电优化,如何监控
  4. 如何做网络优化,如何监控
  5. 如何降低APP包的大小
  6. 如何提升 tableview 的流畅度
  7. 如何检测离屏渲染与优化
  8. 日常如何检查内存泄露?

开发证书

  1. 苹果使用证书的目的是什么
  2. AppStore安装app时的认证流程
  3. 开发者怎么在debug模式下把app安装到设备呢

参考总结

其他问题

  1. PerformSelector & NSInvocation优劣对比
  2. oc怎么实现多继承?怎么面向切面(可以参考Aspects深度解析-iOS面向切面编程
  3. 哪些bug会导致崩溃,如何防护崩溃
  4. 怎么监控崩溃
  5. app的启动过程(考察LLVM编译过程、静态链接、动态链接、runtime初始化)
  6. 沙盒目录的每个文件夹划分的作用
  7. 简述下match-o文件结构

系统基础知识

  1. 进程和线程的区别
  2. HTTPS的握手过程
  3. 什么是中间人攻击?怎么预防
  4. TCP的握手过程?为什么进行三次握手,四次挥手
  5. 堆和栈区的区别?谁的占用内存空间大
  6. 加密算法:对称加密算法和非对称加密算法区别
  7. 常见的对称加密和非对称加密算法有哪些
  8. MD5、Sha1、Sha256区别
  9. charles抓包过程?不使用charles,4G网络如何抓包

参考总结

架构设计

  1. 手动埋点、自动化埋点、可视化埋点
  2. MVC、MVP、MVVM设计模式
  3. 常见的设计模式
  4. 单例的弊端
  5. 常见的路由方案,以及优缺点对比
  6. 如果保证项目的稳定性
  7. 设计一个图片缓存框架(LRU)
  8. 如何设计一个git diff
  9. 设计一个线程池?画出你的架构图
  10. 你的app架构是什么,有什么优缺点、为什么这么做、怎么改进

数据结构与算法

  1. 八大排序算法
  2. 栈&队列
  3. 字符串处理
  4. 链表
  5. 二叉树相关操作
  6. 深搜广搜
  7. 基本的动态规划题、贪心算法、二分查找

iOS面试题答案专栏推荐

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容