IOS面试常见问题解答(2018年10月)

希望您喜欢这些文章及其对您的帮助,让我们从10月的第1部分开始。

对于旧月份:请检查— 2018年IOS面试常见问题解答

回答:这是两个或多个任务可以独立运行的条件,即使其他任务也同时执行。

  1. NSOperation和NSOperationQueue
  2. 大中央派遣(GCD)

队列类型

定义队列类型对于获得所需的结果很重要,并且将有助于确定代码块的执行方式。

同步 :执行过程中当前线程将被阻塞

异步 :任务将在后台线程上运行,使当前线程可用于其他任务

串行 :串行队列一次执行一个块,顺序按输入顺序(FIFO —先进先出)。

您可以创建多个串行队列。 如果您有四个串行队列,它们可以同时异步运行所有四个任务,优点是您可以控制代码块的执行顺序(FIFO),并且它们在每个串行队列上都是线程安全的。

并发 :并发队列有可能一起执行这些块(一次默认为2个块),从而允许进程并行运行。 缺点是您可能无法完全控制哪些任务最先完成。

以下是5个全局队列及其对应的QoS类,它们提供了有关其功能的更具体定义。

回答:我们将介绍以下内容: RETAINRELEASEAUTORELEASE RELEASEALLOCDEALLOCCOPYNSAUTORELEASEPOOL

手动参考计数

Objective-C中的内存管理涉及四个基本规则。 如果遵循这些规则,则不会泄漏内存或导致指针悬空。

规则1.如果您使用“ ALLOC”,“ COPY”或“ NEW”开头的方法创建对象,那么您就拥有它。

在这里您创建了一个保留数为1的新对象,这自动使您成为所有者。

规则2.如果您 RETAIN 对象,那么就拥有它。

在这里,您可以在对象上调用retain ,这会使保留计数增加一。

规则3.如果拥有,则必须发布。

在这里,您可以在对象上调用release方法,从而将保留计数减少一。 当您调用release且保留计数达到零时,对象将通过调用dealloc释放自身。 这意味着您永远不要 直接 调用 dealloc 只要正确释放该对象,它就可以处理所有内容。

规则4.如果您对某个对象保持心跳,则必须拥有该对象(某些罕见的例外)。

基本上,如果您拥有一个对象,那么您肯定知道使用它绝对安全。 如果您拥有它,则有时可以安全使用(在自动发行版块中讨论)。 如果要保留对象以备后用,例如将其存储在ivar或全局变量中,则必须保留它。 否则,它可能会被释放,并且您将剩下一个悬空的指针。

一种例外是使用您直接在代码中键入的字符串(字符串文字)。 字符串文字永远不会释放, retainrelease对它们没有任何作用。

自动参考计数( ARC)

苹果公司已经使用LLVM编译器工具集来实现ARC。

—它不是运行时的一部分

—相反,编译器将注入参考跟踪和清理代码,类似于开发人员将执行的操作

—对象超出范围时的确定性回收内存

—由于没有后台处理或运行时处理,因此需要较少的CPU和RAM,从而使其在移动设备上高效

—无法处理保留周期/对象图—卡在对象图上,而GC会寻找对象图的外部引用,如果找不到,则会清除整个对象图

-根据所编写代码的质量,更容易发生内存泄漏

答:

回答: 委托是一种设计模式,当特定事件发生时,该模式允许一个对象向另一个对象发送消息。

委托对于为对象的用户提供一些自定义其行为的功能很有用。

回答:依赖注入通常用于编写松耦合的代码,因此更易于测试。 当我们在代码中使用依赖注入时,实际上是在给对象一个实例变量。 这意味着,不是将创建自己的依赖关系的责任交给我们的对象,而是将依赖关系注入到对象中。 有以下三种实现方法:

  1. 基于属性的注入
  2. 基于初始化的注入
  3. 基于方法的注入

参考文献

  1. https://swift007blog.wordpress.com/2017/01/14/what-is-arc-in-ios/
  2. https://metova.com/concurrency-in-ios/
  3. https://mlsdev.com/blog/51-7-advantages-of-using-swift-over-objective-c

希望这会对您有所帮助。 请喜欢并与您的同事分享!!!