IOS开发人员高级面试问题

第1部分

  1. 什么是NSNotification?

NSNotificationCenter对象(或简称为通知中心)提供了一种在程序内广播信息的机制。 NSNotificationCenter对象本质上是一个通知调度表。 addObserver:selector:name:object:或addObserverForName:object:queue:usingBlock:方法

2.委托和通知之间的区别?

代表就像电话一样,您可以知道哪个班级正在向哪个班级传递消息。 通知就像无线电广播一样,其中一个类别触发的通知不会被准备收听/捕获通知并相应执行操作的任何类别或所有类别接收。

3. NSRunLoop?

NSRunLoop对象处理来自窗口系统,NSPort对象和NSConnection对象的源输入,例如鼠标和键盘事件。 NSRunLoop对象还处理NSTimer事件。 您的应用程序既不创建也不显式管理NSRunLoop对象。 每个NSThread对象(包括应用程序的主线程)都有一个根据需要自动为其创建的NSRunLoop对象。 如果需要访问当前线程的运行循环,请使用类方法currentRunLoop进行访问。

4.强,弱和保持周期?

这些是与内存管理引用计数和所有权有关的属性。 强属性:当任何对象A对其他任何对象B都有强引用时,则意味着A需要B通过将其引用计数加1 ..在内存中存在,而在相同情况下B对A的引用具有弱属性,则意味着A引用了A而不需要在内存中保存其引用计数。这样,​​它还可以管理保留释放周期。

5.如何使用核心运动/核心位置获取两点之间的估计时间?

使用CoreLocation,我们可以计算从一点到第二点所花费的时间。 在每个位置点的核心位置,我们也有时间戳记。 使用此时间戳,我们可以计算对象的速度。

6.什么是核心数据以及核心数据和SQLite之间的区别。

两者之间存在巨大差异。 SQLLite本身就是一个数据库,就像我们拥有MS SQL Server一样。 但是CoreData是一个ORM(对象关系模型),它在数据库和UI之间创建一个层。 它加快了交互过程,因为我们不必编写查询,只需与ORM一起使用,并让ORM处理后端。 对于大数据的保存或检索,我建议使用Core Data,因为它具有处理设备处理速度较慢的功能。

7. Nsurlconnection与nsurlsession?

NSURLConnection组成基础URL加载系统的一组相互关联的组件:NSURLRequest,NSURLResponse,NSURLProtocol,NSURLCache,NSHTTPCookieStorage,NSURLCredentialStorage及其同名NSURLConnection NSURLRequest对象被传递到NSURLConnection对象。 委托(遵从以前的非正式协议和协议)作为NSURLResponse异步响应,并且从服务器发送所有关联的NSData在将请求发送到服务器之前,先查询共享缓存,并且根据策略和可用性,缓存的响应可以立即透明地返回。 如果没有高速缓存的响应可用,则发出带有为任何后续请求高速缓存其响应的选项的请求。 在与服务器协商请求的过程中,该服务器可能会发出身份验证质询,该挑战可以由共享cookie或凭据存储或连接委托自动处理。 已注册的NSURLProtocol对象也可以拦截传出的请求,以根据需要无缝更改加载行为。 除了同义的类NSURLSession外,NSURLSession还引用了一组相互依赖的类。 NSURLSession由与以前相同的部分组成,包括NSURLRequest,NSURLCache等,但是用NSURLSession,NSURLSessionConfiguration和NSURLSessionTask的三个子类替换了NSURLConnection:NSURLSessionDataTask,NSURLSessionUploadTask和NSURLSessionDownloadTask。 NSURLSessionTask是一个抽象子类,具有三个可直接使用的具体子类:NSURLSessionDataTask,NSURLSessionUploadTask和NSURLSessionDownloadTask。 这三个类封装了现代应用程序的三个基本联网任务:获取数据(例如JSON或XML)以及上载和下载文件。

8.使用仪器,为什么要使用?

仪器用于检查内存消耗和其他原理图。

9.了解MVVM,VIPER和其他吗?

遵循https://auth0.com/blog/compare-mvvm-and-viper-architectures/

10. Swift比Objective-C有什么好处?

  • Swift更容易阅读。
  • Swift更易于维护。
  • Swift更安全。
  • Swift与内存管理统一。
  • Swift需要更少的代码。
  • Swift更快。
  • 与开源项目的名称冲突更少。
  • Swift支持动态库。
  • Swift Playgrounds鼓励交互式编码。
  • Swift是您可以影响的未来。

11. 哪个更快:通过 NSArray NSSet 进行迭代

当集合中项目的顺序不重要时,NSSet可以提供更好的性能来查找集合中的项目。 原因是NSSet使用哈希值来查找项目(例如字典),而数组必须遍历其整个内容以查找特定的对象。

还有很多问题吗? 不用担心,即使是最有经验的开发人员也不是一无所知,重要的是要熟悉一些基本主题,这些主题会在面试中给您带来信心,当然也会使您的潜在雇主有信心雇用您。

因此,如果您目前正在面试初中或高级职位,并且被要求提供不在此列表中的内容,请在评论中分享!

希望对您有帮助。 我将尽快上传第2部分✌️

和平!