最近公司转项、切模式,来了一次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中。