1. 以下哪一段代码不会抛出异常()
正确答案: C 你的答案: D (错误)
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];
C,
A:OC数组中的元素不能是基本数据类型,必须是对象,并且array[3]下标越界,Xcode编译时报错
B:字典中键值对不能为nil,运行时崩溃
C:OC中向空对象发送消息,不执行任何操作,不报错,不崩溃
D:数组下标越界,运行时崩溃
2. delegate中的property使用以下哪个属性()
正确答案: A 你的答案: A (正确)
assign
retain
copy
strong
delegate中文叫做委托,通常会用在class内部把一些事件处理”委托”给别人去完成。
为什么我们不用retain而要用assign呢?
原因就是在于iOS的reference counting的环境中,我们必须解决circular count的问题。
(循环计数)assign 防止循环引用
3. C和Objective-C的混合使用,以下描述错误的是()
正确答案: B 你的答案: A (错误)
cpp文件只能使用C/C++代码
cpp文件include的头文件中,可以出现objective-C的代码
mm文件中混用cpp直接使用即可
cpp使用objective-C的关键是使用接口,而不能直接使用代码
解释:(操,看错了以为是选描述正确的)
B obj-c 的编译器处理后缀为 m 的文件时,可以识别 obj-c 和 c 的代码,处理 mm 文件可以识别 obj-c,c,c++ 代码,但cpp 文件必须只能用 c/c++ 代码,而且 cpp 文件 include 的头文件中,也不能出现 obj-c 的代码,因为 cpp 只是 cpp
4. 关于Objective-C中属性的说明,以下错误的是()
正确答案: D 你的答案: D (正确)
readwrite是可读可写特性,需要生成getter方法和setter方法
readonly是只读特性,只有getter方法,没有setter方法
assign是赋值属性,setter方法将传入参数赋值给实例变量
retain表示持有特性,copy属性表示拷贝属性,都会建立一个相同的对象
解释:Copy是创建一个新对象,Retain是创建一个指针,引用对象计数加1。
Copy属性表示两个对象内容相同,新的对象retain为1 ,与旧有对象的引用计数无关,旧有对象没有变化。copy减少对象对上下文的依赖。
Retain属性表示两个对象地址相同(建立一个指针,指针拷贝),内容相同,这个对象的retain值+1也就是说,retain 是指针拷贝,copy 是内容拷贝
5. 下面关于线程管理错误的是()
正确答案: B 你的答案: B (正确)
GCD在后端管理着一个线程池
NSOperationQueue是对NSthread的更高层的封装
NSThread需要自己管理线程的生命周期
GCD可以根据不同优先级分配线程
是错的,SOperationQueue是对GCD的更高层的封装
C是对的。
// 初始化线程
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
// 设置线程的优先级(0.0 – 1.0,1.0最高级)
thread.threadPriority = 1;
// 开启线程
[thread start];
6. 在没有navigationController的情况下,要从一个ViweController切换到另一个ViewController应该()
正确答案: C 你的答案: C (正确)
{self navigationController pushViewController:nextViewController animated:YES};
{self view addSubview:nextViewController.view};
{self presentModalViewController:nextViewController animated:YES};
{self pushViewController:nextViewController animated:YES};
A是navigationController包裹下的控制器才使用的跳转,不符合题意
B是加载一个控制器的view,也是错的
C是IOS中的模态切换,符合题意,所以C是正确答案
D明显就是错误的
A 的话需要 NavigationController
B 的话需要使用 ViewController 容器
D 也需要 NavigationController
7.下面对category描述不正确的是()
正确答案: B 你的答案: B (正确)
category可以添加新的方法
category可以删除修改之前的方法
将类的实现分散到多个不同文件或多个不同框架中
创建对私有方法的前向引用
8. iOS中的数据持久化方式()
正确答案: D 你的答案: D (正确)
属性列表
对象归档
SQLite和CoreData
以上全部
9. NSRunLoop的以下描述错误的是()
正确答案: C 你的答案: D (错误)
Runloop并不是由系统自动控制的
有3类对象可以被run loop监控:sources,timers,observers
线程是默认启动run loop的
NSTimer可手动添加到新建的NSRunLoop中
A:Runloop的作用在于当有事情要做时它使当前的thread工作,没有事情做时又使thread 休眠sleep。Runloop并不是由系统自动控制的,尤其是对那些新建的次线程需要对其进行显示的控制。
B:有3类对象可以被run loop监控:sources、timers、observers。当这些对象需要处理的时候,为了接收回调,首先必须通过 CFRunLoopAddSource ,CFRunLoopAddTimer 或者 CFRunLoopAddObserver 把这些对象放入run loop。 要停止接收它的回调,可以通过CFRunLoopRemoveSource从run loop中移除某个对象。
C:每一个线程都有自己的runloop, 主线程是默认开启的,创建的子线程要手动开启,因为NSApplication 只启动main applicaiton thread。
D:NSTimer默认添加到当前NSRunLoop中,也可以手动制定添加到自己新建的NSRunLoop的中。