iOS技能测试题

最近公司转项、切模式,来了一次iOS的技能测试,有幸获得一份卷子,给大家推荐一下:


多选题:

1.下面哪些是IOS实现多线程的方法:ABD

A.NSThread

B.GCD(Grand Centeral Dispatch)

C.NSTimer

D.NSOperation和NSOperationQueue

2.GCD中以下哪些方式可能会开启新线程 CD

A.同步执行+并发队列

B.同步执行+串行队列

C.异步执行+并发队列

D.异步执行+串行队列

E.同步执行+主队列

F.异步执行+主队列

3.IOS数据持久化都有哪些方法 ABCDE

A.文件

B.归档

C.属性列表

D.数据库SQLite

E.CoreData

4.下面关于NSURLSession与NSURLConnection的区别说明正确的是 ABCD

A.NSURLConnection执行下载任务时是将数据下载到内存中,会造成内存暴涨,而NSURLSession是直接将数据下载到沙盒文件中,不会占用多少内存

B.使用NSURLSession发起请求时,暂停后可以重新启动,而NSURLConnection停止后不能重新启动请求任务。

C.NSURLSession断点续传比NSURLConnection更加简单

D.NSURLSession支持HTTP 2.0而NSURLConnection不支持。

5.下面关于Delegate和通知的区别说明正确的是:ABD

A.都是用来传递消息,Delegate是一对一,通知是一对多

B.通知通过维护一个array,实现一对多消息的转发

C.通知需要两者之间建立联系,不然无法传递消息

D.Delegate需要两者之间建立联系,不然没法调用代理方法。

6.关于UDP、TCP、HTTP说法正确的是:ABCD

A.UDP是面向无连接的,数据传输不可靠

B.TCP是面向连接的,建立连接需要经过三次握手,是可靠的传输层协议

C.HTTP 是建立在TCP基础上的应用层协议,实际传输数据还是使用TCP协议

D.HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL安全层

单选题

1.下列说法错误的是 C

A.串行队列只会开启一个线程,让任务一个接着一个执行,一个任务执行完毕后再执行下一个任务

B.并发队列会开启多个线程,并且同时执行多个任务

C.GCD中的队列就是线程

D.在主队列中同步执行任务会造成死锁

2.下列回调机制的理解不正确的是    B

A. 目标动作对:当两个对象之间有⽐比较紧密的关系时,如视图控制器与其下的某个视图。     

B. 代理:也叫委托,当某个对象收到多个事件,并要求同一个对象来处理所有事件时。委托机制必须依赖于某个协议定义的⽅方法来发送消息。     

C. 通告机制:当需要多个对象或两个⽆无关对象处理同一个事件时。     

D. Block:适⽤于回调只发⽣生一次的简单任务。

3.Object-C声明一个类索要用到的编译指令是 A

A. @interface SomeClass

B. @protocol SomeClass

C. @implementation SomeClass

D. @autorelease SomeClass

4.下面关于Objective-C内存管理的描述错误的是 A

A. 当使用ARC来管理内存时,代码中不可以出现autorelease

B. autoreleasepool 在 drain 的时候会释放在其中分配的对象

C. 当使用ARC来管理内存时,在线程中大量分配对象而不用autoreleasepool则可能会造成内存泄露

D. 在使用ARC的项目中不能使用NSZone

5.下面关于#import和#include的描述正确的是 A

A. #import 是 #include 的替代指令,防止重复引用

B. #import 和 #include 不可以混合使用

C. #import 只用于引用 Objective-C的文件, #include 只用于引用C和C++的文件

D. #import 和 #include 的使用效果完全相同

6.在UIKit中,frame与bounds的区别是  C

A. frame 是 bounds 的别名

B. frame 是 bounds 的继承类

C. frame 的参考系是父视图坐标,bounds 的参考系是自身的坐标

D. frame 的参考系是自身坐标,bounds 的参考系是父视图的坐标

7.下面关于线程管理错误的是  B

A. GCD所用的开销要比NSThread大

B. 可以在子线程中修改UI元素

C. NSOperationQueue是比NSthread更高层的封装

D. GCD可以根据不同优先级分配线程

8.UIViewController在显示过程中,各个方法的调用顺序是 A

A. init -> viewDidLoad -> viewDidAppear -> viewDidUnload

B. init -> viewDidAppear -> viewDidLoad -> viewDidUnload

C. init -> viewDidLoad -> viewDidUnload -> viewDidAppear

D. init -> viewDidAppear -> viewDidUnload -> viewDidLoad

9.在没有navigationController的情况下,要从一个ViewController切换到另一个ViewController应该  D

A. [self.navigationController pushViewController:nextViewController animated:YES];

B. [self.view addSubview:nextViewController.view];

C. [self pushViewController:nextViewController animated:YES];

D. [self presentModalViewController:nextViewController animated:YES];

10.下列技术不属于多线程的是 A

A Block

B NSThread

C NSOperation

D GCD

11.堆和栈的区别正确的是  D

A 对于栈来讲,我们需要手工控制,容易产生memory leak

B 对于堆来说,释放工作由编译器自动管理,无需我们手工控制

C 在Windows下,栈是向高地址扩展的数据结构,是连续的内存区域,栈顶的地址和栈的最大容量是系统预先规定好的

D 对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低

12.MRC文件在ARC工程混合编译时,需要在文件的Compiler Flags上添加什么参数  B

A -shared

B -fno-objc-arc

C -fobjc-arc

D –dynamic

13.下列关于类别说法错误的是 D

A.类别主要被用作给现有类添加新的方法

B.类别被用作一个大类的分散实现

C.使用类别创建前向引用

D.使用类别给现有类添加属性

14.下面那个方法可以比较两个NSString *str1, *str2 的异同 B

A. if(str1 = str2) xxx ;

B. if([str1 isEqualToString:str2]) xxx ;

C. if(str1 && str2) xxx ;

D. if([str1 length] == [str2 length]) xxx;

15.Objective-C有私有方法吗?有私有变量吗?B

A. 有私有方法和私有变量

B. 没有私有方法, 也没有私有变量

C. 没有私有方法,有私有变量

D. 有私有方法,没有私有变量

16.使用imageNamed方法创建UIImage对象时,与普通的init方法有什么区别 C

A. 没有区别,只是为了方便

B. imageNamed方法只是创建了一个指针,没有分配其他内存

C. imageNamed方法将图片加载到内存中后不再释放

D. imageNamed方法将使用完图片后立即释放

17.以下关于tableView编辑的方法中哪个不属于代理方法 A

A -(void)setEditing:(BOOL)editing animated:(BOOL)animated

B -(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath

C -(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath

D -(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

18.多线程中栈与堆是公有的还是私有的 C

A. 栈公有, 堆私有

B. 栈公有,堆公有

C. 栈私有, 堆公有

D. 栈私有,堆私有

19.使用Xcode创建工程时,支持同时创建的版本管理库是 C

A. Subversion

B. Mercurial

C. Git

D. Concurrent Versions System

20.一个类的delegate(代理)的作用不正确的是 D

A. delegate中的函数在其他类中实现

B. 主要用于不同类型的对象之间一对一传递消息

C. 没有指派则不会触发

D. 可以一个对象的delegate指派给多个其他类型的对象

21.IOS的通知NSNotification用到了哪种代码设计模式 D

A.单例模式

B.委托模式

C.MVC模式

D.观察者模式

22.下面的代码输出什么? C

@implementation Son : Father

- (id)init {

if (self = [super init]) {

NSLog(@"%@", NSStringFromClass([self class])); // Son

NSLog(@"%@", NSStringFromClass([super class])); // Son

}

return self;

}

@end

A.Father son

B.son  Father

C. son  son

D. Father Father

23.以下代码运行结果如何?  C

- (void)viewDidLoad {   

[super viewDidLoad];

NSLog(@"1");

dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"2");    });

NSLog(@"3");

}

A.1  2

B.1  2  3

C.1 

D.1  3

24.线程和进程的区别不正确的是 B

A.进程和线程都是由操作系统所体会的程序运行的基本单元

B.线程之间有单独的地址空间

C.进程和线程的主要差别在于他们是不同的操作系统资源管理方式

D.线程有自己的对战和局部变量

25.对于runloop的理解不正确的是 C

A.每一个线程都有其对应的Runloop

B.默认非主线程的Runloop是没有运行的

C.在一个单独的线程中没有必要去启用Runloop

D.可以将NSTimer添加到Runloop中。

总结:希望对大家也有一定的帮助。

你可能感兴趣的:(iOS技能测试题)