iOS软件工程师笔试题系列1

来源:互联网 发布:java中的类 编辑:程序博客网 时间:2024/06/03 21:33

资和信公司:
iOS企业笔试系列1—接下来的博文中还会有其他企业笔试题–持续更新中。。。

1、在Xcode中,需要编译混合Objective-C和C++的源码文件,需要将文件格式的后缀改为 (C)

A. .c

B. .cpp

C. .mm

D. .m


2、Object-C中声明一个类所要用到的编译指令是:(A)

A. @interface SomeClass

B. @protocol SomeClass

C. @implementation SomeClass

D. @autorelease SomeClass


3、多线程中栈与堆是公有的还是私有的: (C)

A.栈公有,堆私有

B.栈公有,堆公有

C.栈私有,堆公有

D.栈私有,堆私有

解释: 在多线程环境下,每个线程拥有一个栈和一个程序计数器。栈和程序计数器用来保存线程的执行历史和线程的执行状态,是线程私有的资源。其他的资源(比如堆、地址空间、全局变量)是由同一个进程内的多个线程共享。

4、下面哪个方法不属于NSObject的内省(Introspection)方法:

A. init

B. isKindOfClass

C. responseToSelector

D. isMemberOfClass

讲解: http://blog.csdn.net/liyunxiangrxm/article/details/53542331


5、使用protocol时,声明一组可选择实现与否的函数,需要在声明的前一行加上: (B)
A. @required

B.@optional

C. @interface

D. @protocol


6、需要在手动管理内存分配和释放的Xcode项目中引入和编译用ARC风格编写的文件,需要在文件的Compiler Flags上添加参数:(C)
A. -shared

B. -fno-objc-arc

C. -fobjc-arc

D. -dynamic

解释: 编译问题中普通语法问题: ARC问题     如果是工程ARC, 库是非ARC,    -fno-objc-arc     如果工程是非arc,库是arc,    -fobjc-arc     例如我们在ARC工程中加入SDWebImage,SDWebImage是MRC的  用时需要到里面加-  -fno-objc-arc 一般我们现在的工程都用的是ARC的,所以我们添加的是-fno-objc-arc

7、下面关于Objective-C内存管理的描述错误的是 (A)

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

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

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

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


8、下面关于#import和#include的描述正确的是 (A)

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

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

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

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


9、在UIKit中,frame与bounds的区别是 (C)

A. frame 是 bounds 的别名

B. frame 是 bounds 的继承类

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

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


10、Objective-C有私有方法吗?有私有变量吗? (C)

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

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

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

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


11、下面关于线程管理错误的是 (B)

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

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

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

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


12、UIViewController在显示过程中,各个方法的调用顺序是 (A)

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

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

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

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

    解释:当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序  1、 alloc 创建对象,分配空间  2、init (initWithNibName) 初始化对象,初始化数据  3、loadView 从nib载入视图 ,通常这一步不需要去干涉。除非你没有使用xib文件创建视图 4、viewDidLoad 载入完成,可以进行自定义数据以及动态创建其他控件  5、viewWillAppear 视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了  6、viewDidAppear                视图已在屏幕上渲染完成 当一个视图被移除屏幕并且销毁的时候的执行顺序,这个顺序差不多和上面的相反    1、viewWillDisappear 视图将被从屏幕上移除之前执行   2、viewDidDisappear 视图已经被从屏幕上移除,用户看不到这个视图了 3、dealloc 视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放    关于viewDidUnload:在发生内存警告的时候如果本视图不是当前屏幕上正在显示的视图的话,viewDidUnload将会被执行,本视图的所有子视图将被销毁,以释放内存,此时开发者需要手动对viewLoad、viewDidLoad中创建的对象释放内存。因为当这个视图再次显示在屏幕上的时候,viewLoad、viewDidLoad 再次被调用,以便再次构造视图。

13、使用imageNamed方法创建UIImage对象时,与普通的init方法有什么区别? (C)

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

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

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

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

 解释:imageNamed是会把读取到的image存在某个缓存里面,第二次读取相同图片的话系统就会直接从那个缓存中获取,从某种意义上好像一种优化,但是imageNamed读取到的那个图片似乎不会因为Memory Warning而释放,所以用这个会导致在内存不足的时候闪退。简单的说imageNamed采用了缓存机制,如果缓存中已加载了图片,直接从缓存读就行了,每次就不用再去读文件了,效率会更高 。

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

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

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

C. 没有指派则不会触发

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


15、什么是key window? (C)

A. App中唯一的那个UIWindow对象

B.可以指定一个key的UIWindow

C. 可接收到键盘输入等事件的UIWindow

D. 不可以隐藏的那个UIWindow对象


16、属性 readwrite,readonly,assign,retain,copy,nonatomic 各 是什么作用,在那种情况下用?

1. readwrite 是可读可写特性;需要生成 getter 方法和 setter 方法时2. readonly 是只读特性 只会生成 getter 方法 不会生成 setter 方法 ;不希望属性在 类外改变3. assign 是赋值特性,setter 方法将传入参数赋值给实例变量;仅设置变量时;4. retain 表示持有特性,setter 方法将传入参数先保留,再赋值,传入参数的 retaincount 会+1;5. copy 表示赋值特性,setter 方法将传入对象复制一份;需要完全一份新的变量时。6. nonatomic 非原子操作,决定编译器生成的 setter getter 是否是原子操作,atomic 表示多线程安全,一般使用 nonatomic

17、什么是key window? (C)

A. App中唯一的那个UIWindow对象

B.可以指定一个key的UIWindow 

C. 可接收到键盘输入等事件的UIWindow

D. 不可以隐藏的那个UIWindow对象


这里写图片描述

http://blog.csdn.net/liyunxiangrxm

3 0
原创粉丝点击