IOS面试常见问题解答(2018年8月)第3部分

本文包含iOS工程师的近期面试经验,我从应聘者那里收集了问题并与您分享,希望对您有所帮助。

Q1。 以下程序的输出是什么(查找同步/异步)

解:

Q2。 以下程序的输出是什么(查找同步/异步)

解:

Q3。 以下程序的输出是什么(查找同步/异步),

是否会出现任何错误-编译时或运行时,为什么?

解:

永远不要在主队列上调用同步功能

如果在主队列上调用sync函数,它将阻塞队列,队列将等待任务完成,但是由于队列已停止,任务甚至无法启动,因此该任务将永远无法完成已经被封锁。 这称为死锁

Q4。 以下程序的输出是什么(查找同步/异步)

解:

Q5。 目标C中iOS应用程序的切入点是什么?

Q6。 委托和数据源有什么区别?

解决方案: 理论上

委托和数据源模式在很大程度上是独立的,并且是正交的:

委托模式在Cocoa中非常常见,并允许委托(在OS X 10.6之前实现非正式委托协议的任何实例,或在10.6及更高版本中实现正式委托@protocol的对象)修改对象实例的行为。 通常使用这种模式来代替子类化:不是通过子类化类来改变其行为,而是提供了一个响应适当方法的委托。 使用委托的类在约定的事件中向其委托发送消息。 类和委托之间的API由该类定义,并且每个使用该模式的类都不相同,但是API通常由消息组成,这些消息询问委托人如何处理特定事件。 委托模式优于子类的一个优点是,一个类可以实现多个委托协议,从而使其实例充当多个类的委托。 类似地,一个对象实例可以是多个其他对象的委托(因此,大多数委托API将该对象作为该API中每个消息的第一个参数传递)。 委托模式在其他UI框架中并不常见(尽管Qt确实在其Model / View框架中使用委托模式),并且与本质上是类型函数指针的.Net / CLR委托不同。

数据源模式通常由Cocoa中具有复杂状态数据的NSView子类使用,例如NSBrowser,NSTableView,NSOutlineView等。数据源协议定义了一个API,这些(和其他)类的实例可用于获取API。要在视图中显示的数据。 尽管NSController和Cocoa Bindings体系结构已取代了数据源模式的许多用途,但它仍然很常见且功能非常强大。 像上面描述的委托模式一样,其功能的一部分来自对象,该对象能够充当使用多个数据源的实例(甚至可能具有不同数据源协议的多个类的实例)的数据源。 数据源模式通常在其他UI框架中使用,例如Qt(在Model / View框架中,模型类似于数据源)和WPF / Silverlight(数据源可能更类似于视图模型) )。

几乎:

委托用于类之间的通信,数据源用于提供类的运行时行为。

Q7。 frame和bound之间有什么区别?

解:

希望你喜欢这个解释。 如有其他疑问,请访问-iOS专家系列或访谈系列