首页 > 正文

ios工程师面试题

来源:五百丁 作者:五百丁小编

ios面试问题.jpg


一、ios工程师面试题


比较和对比在OS X和IOS中并发的不同方式


答案:


在IOS中实现并发基本上有三种方式:


1、线程


2、分派队列


3、操作队列


线程的劣势是他们降低了对开发者创造可升级的方案的负担。你需要决定要创造多少线程,并依据情况动态调整数量。同样,app承担了与创造和维护它所使用的线程的的大部分代价。


因此OS X和IOS更喜欢采用异步设计的方法来解决并发问题,而不是依赖于线程。


异步开启任务的其中一个技术就是Grand Central Dispatch (GCD),它降低了线程管理到系统的水平。所有的开发者需要做的就是定义需要执行的任务,然后添加它们到合适的分派队列。GCD负责创造需要的线程,以及对线程上运行的任务做调度。


所有分派的队列是先入,先出(FIFO)的数据结构,所以任务总是开始于和他们被添加的时候同样的顺序。


一个操作队列是一个并发的分派队列的Cocoa 的对等物,由NSOperationQueue来实现。不像分派队列,操作队列不限于以FIFO的顺序执行任务,它对你的任务支持复杂的执行顺序图形。


ios工程师面试题二


下面的代码会生成日志“areEqual” 还是“areNotEqual”?解释你的答案。


NSString *firstUserName =@"nick";

NSString *secondUserName =@"nick";

if (firstUserName == secondUserName)

{

NSLog(@"areEqual");

}

else

{

NSLog(@"areNotEqual");

}


答案:


这段代码将会产生“areEqual”。


然而一个人会认为这很明显,但是不是的,这就是为什么:


比较指针值等同于检查它们是否指向同一个对象。指针将会有同样的值,假如而且只有在它们确实指向同样的对象的情况下(然而指针指到不同的对象将不会产生相同的值,即使它们指向的对象有相同的值)。


在上面的代码片段中,firstUserName 和secondUserName是每一个指向字符串对象的指针。一个人很容易猜想它们指向不同的字符串对象,尽管事实是它们指向的对象都有相同的值。然而,IOS编辑器优化了有相同值的字符串对象的参数(也就是,它重新使用了它们而不是冗繁的分配同一的字符串对象),因此两个指针实际上指向相同的地址,而且情况因此被估计为true。


ios工程师面试题三


列举并解释IOS应用程序状态的不同类型


答案:


IOS 应用程序的状态如下:


不运行的状态:app尚未启动或是运行,但被系统终止。


不活跃的状态:app在前台运行但是目前没有接收事件。(尽管它或许执行其他代码)。一个app通常只是暂时的保持在这个状态下在它转到一个不同的状态的时候。在任意时候它唯一保持不活跃的时间,是当用户锁屏或是系统促使用户对某个事件作出反应(比如说一个即将进来的电话或是SMS邮件)。


活跃状态:app在前台运行而且接收事件。这是前台app的正常模式。


背景状态:app在背景中并执行代码。大部分的app在它们被暂停的时候暂时进入这个状态。然而,一个app需要额外的执行时间可能会保持在这种状态一段时间。另外,一个app直接启动在背景中进入这个状态而不是不活跃的状态。


暂停状态:暂停的时候,一个app仍然保持在内存中但是并不执行任何代码。当一个低内存的情况发生的时候,系统或许会清除暂停的app,而不需要通知为前台的app腾出更多地空间。


资讯来源说明:本文章来自网络收集,如侵犯了你的权益,请联系QQ:850873385进行删除。

Copyright © 2014-2018 500d.me. All Rights Reserved.

个人中心 - 加入我们 - 帮助中心 - 网站地图 - 粤ICP备14072413号