最新整理:iOS面试题-面试常问问题(二)

前言:

最近把 iOS 面试中可能会遇到的问题整理了一番, 题目大部分是网上收录的, 方便自己巩固复习, 也分享给大家; 希望对大家有所帮助!

  • 对于答案,不一定都合适,欢迎大家积极讨论;整理不易,如果您觉得还不错,麻烦在文末 “点个赞” ,或者留下您的评论“Mark” 一下,谢谢您的支持

iOS面试题-面试常问问题(二)

1.C和 OC 如何混编

xcode可以识别一下几种扩展名文件:

  • .m文件,可以编写 OC语言 和 C 语言代码
  • .cpp: 只能识别C++ 或者C语言(C++兼容C)
  • .mm: 主要用于混编 C++和OC代码,可以同时识别OC,C,C++代码
2. Swift 和OC 如何调用?
  • Swift 调用 OC代码
    需要创建一个 Target-BriBridging-Header.h 的桥文件,在乔文件导入需要调用的OC代码头文件即可

  • OC 调用 Swift代码
    直接导入 Target-Swift.h文件即可, Swift如果需要被OC调用,需要使用@objc 对方法或者属性进行修饰

3. Foundation 对象与 CoreFoundation 对象 有什么区别?
  • Foundation对象是OC的,在MRC下需要手动管理内存,ARC下不需要手动管理
  • Core Foundation对象是C对象, MRC和ARC都需要手动管理内存
  • 数据类型之间的转换
    • ARC:__bridge_retained, __bridge_transfer(自动内存管理)
    • 非ARC: __bridge
4.与OC比较.Swift有什么优点?

Swift 是一门新型语言,借鉴了JS,Python,C#,Ruby等语言特性,看上去偏脚本化,Swift 仍支持 cocoa touch 框架

优点:

  1. Swift更加安全,它是类型安全的语言。
  2. Swift容易阅读,语法和文件结构简易化。
  3. Swift更易于维护,文件分离后结构更清晰。
  4. Swift代码更少,简洁的语法,可以省去大量冗余代码
  5. Swift速度更快,运算性能更高。

精选全网 · iOS面试题答案PDF文集

  • 获取加小编的iOS技术交流圈:937 194 184,直接获取

5. delegate(代理,委托)

委托是协议的一种,顾名思义,就是委托他人帮自己去做什么事。

delegate:

  1. 非常严格的语法。所有将听到的事件必须是在delegate协议中有清晰的定义,语法清晰,易读;
  2. 如果delegate中的一个方法没有实现那么就会出现编译警告/错误
  3. 在释放代理对象时,需要小心的将delegate改为nil。一旦设定失败,那么调用释放对象的方法将会出现内存crash
6.Notification(通知)

在IOS应用开发中有一个”Notification Center“的概念。它是一个单例对象,允许当事件发生时通知一些对象。

notification:

  1. 对于一个发出的通知,多个对象能够做出反应,即1对多的方式实现简单
  2. controller能够传递context对象(dictionary),context对象携带了关于发送通知的自定义的信息
  3. 在调试的时候应用的工作以及控制过程难跟踪;
7.KVO

KVO是一个对象能够观察另外一个对象的属性的值,并且能够发现值的变化。

KVO:

  1. 能够提供一种简单的方法实现两个对象间的同步。例如:model和view之间同步;
  2. 能够对非我们创建的对象,即内部对象的状态改变作出响应,而且不需要改变内部对象(SKD对象)的实现;
8. 如何选择delegate、notification、KVO?

三种模式都是一个对象传递事件给另外一个对象,并且不要他们有耦合。

  1. delegate. 一对一
  2. notification 一对多,多对多
  3. KVO 一对一

三者各有自己的特点:

  • delegate 语法简洁,方便阅读,易于调试
  • notification 灵活多变,可以跨越多个类之间进行使用
  • KVO 实现属性监听,实现model和view同步
  • 可以根据实际开发遇到的场景来使用不同的方式
9. 若你去设计一个通知中心,你会怎样设计?

个人理解: 参考现有的通知中心

  1. 创建通知中心单例类,并在里面有个一个保存通知的全局NSDiction
  2. 对于注册通知的类,将其注册通知名作为key, 执行的方法和类,以及一些参数做为一个数组为值
  3. 发送通知可以调用通知中心,通过字典key(通知名),找到对应的 类和方法进行执行调用传值.
10. Notification 和KVO区别
  • KVO提供一种机制,当指定的被观察的对像的属性被修改后,KVO会自动通知响应的观察者,KVC(键值编码)是KVO的基础
  • 通知:是一种广播机制,在实践发生的时候,通过通知中心对象,一个对象能够为所有关心这个时间发生的对象发送消息,两者都是观察者模式,不同在于KVO是被观察者直接发送消息给观察者,是对象间的直接交互,通知则是两者都和通知中心对象交互,对象之间不知道彼此
  • 本质区别,底层原理不一样.kvo 基于 runtime, 通知则是有个通知中心来进行通知
11.结构体与数组有什么区别?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值