1、以下哪一段代码不会抛出异常()
NSArray *array=@[1,2,3];NSNumber * number=array[3];
NSDictionary *dict=@{@"key":nil};
NSString *str=nil;NSString *str2=[str substringFromIndex:3];
NSString *str=@"hi";NSString *str2=[str substringFromIndex:3];
其中A是因为数组中存储基本数据类型应该这么存储 NSArray * array =@[@1,@2,@3];,而且取元素,下标越界
选项B,在字典中键值对不能为nil,编译都通不过,如果按照选项B的写法,如果我们这么写 UIView * view2 = nil;
NSDictionary * dict = @{@"key":view2}; 编译的时候是通过了,不过运行的时候会崩溃
选项C正确因为在OC中向空对象发送消息,不执行任何操作。所以没事
选项D,数组下标越界
2、C和Objective-C的混合使用,以下描述错误的是()
cpp文件只能使用C/C++代码
cpp文件include的头文件中,可以出现objective-C的代码
mm文件中混用cpp直接使用即可
cpp使用objective-C的关键是使用接口,而不能直接使用代码
.cpp文件必须只能用c/c++代码,在mm文件中可以混用cpp直接使用。
3、下面关于线程管理错误的是()
GCD在后端管理着一个线程池
NSOperationQueue是对NSthread的更高层的封装
NSThread需要自己管理线程的生命周期
GCD可以根据不同优先级分配线程
NSOperationQueue是管理NSOperation的,肯定和NSThread是没有关系的。ios中多线程的实现方案四种,pthread NSThread GCD NSOperation。其中NSThread是面向对象的,基于pthread的封装。NSThread是需要自己管理线程的生命周期的。如果使用系统设置的的queue,可以设置DISPATCH_QUEUE_PRIORITY,达到不同的优先级。有如下几种#define DISPATCH_QUEUE_PRIORITY_HIGH 2
#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0
#define DISPATCH_QUEUE_PRIORITY_LOW (-2)
#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN
GCD在后端管理者一个线程池是对的,因为GCD是自己管理线程的,如果这个线程做完这个任务了,接着还有下一个任务就会去线程池当前看有没有线程,然后去取去执行任务。