"IOS"

相关试题
第 1 题 [单选题] :
Objective-C声明一个类所要用到的编译指令是
答案:A

解析:

第 2 题 [问答题] :
UIView 和CALayer 有什么区别?

解析:两者最大的区别是,图层不会直接渲染到屏幕上。

第 3 题 [问答题] :
GCD的列队(dispatch_queue_t)分哪两种类型?

解析:Serial Dispatch Queue -- 线程池只提供一个线程用来执行任务,所以后一个任务必须等到前一个任务执行结束才能开始。 Concurrent Dispatch Queue -- 线程池提供多个线程来执行任务,所以可以按序启动多个任务并发执行。

第 4 题 [单选题] :
对于下面的程序
#include<stdio.h>
#include<string.h>
char*scmp(char*s1,char*s2)
{
if(strcmp(sl,s2)<0)retum(s1);
else return(s2);
}
main()
{
int i;char string[20],str[3][20];
for(I=0;i<3;i++)gets(str[i]);
strcpy(string,scmp(str[0],str[1]));
strcpy(string,scmp(string,str[2]));
printf(”%s\n”,string);
}
若运行时依次输入:abcd、abba和abc三个字符串,则输出结果为________。
答案:B

解析:本题自定义函数semp()的作用是比较字符串s1和s2的大小,如果sl&lt;s2,函数返回s1的 值,否则返回s2的值。若运行时依次输入abed、abba和abe三个字符串,执行 strcpy(string,scmp(str[O],str[1]));后,string的值为abba,再执行 strepy(string,scmp(string,str[2]));,由于scmp(string,str[2])返回string的值 abba,再拷贝到字符串数组string中,所以本题输出abba。

第 5 题 [问答题] :
类工厂方法是什么

解析:类工厂方法的实现是为了向客户提供方便,它们将分配和初始化合在一个步骤中, 返回被创建的对象,并
进行自动释放处理。这些方法的形式是+ (type)className…(其中 className不包括任何前缀)。 工厂方法可能不仅仅为了方便使用。它们不但可以将分配和初始化合在一起,还可以 为初始化过程提供对
象的分配信息。 类工厂方法的另一个目的是使类(比如NSWorkspace)提供单件实例。虽 然init…方法可以确认一
个类在每次程序运行过程只存在一个实例,但它需要首先分配一个”生的”实例,然后还必须释放该实例。
工厂 方法则可以避免为可能没有用的对象盲目分配内存。

第 6 题 [多选题] :
修改联系人使用的函数有哪些?
答案:CD

解析:

第 7 题 [单选题] :
假设a和b为int型变量,则执行以下语句后,b的值为_______。 a=l:b=10: do { b-=a: a++: } while(b一<0):
答案:D

解析:本题程序第一轮循环后b的值为9,在进行循环条件测试时,先取b的现值9与O比较,然后再将b减l。由于9&lt;0不成立,因此循环结束,这时b的值已变成8,本题正确答案为D。

第 8 题 [单选题] :
对或错?NSPredicate和正则表达式的格式相同。
答案:A

解析:

第 9 题 [问答题] :
动态绑定—在运行时确定要调用的方法

解析:动态绑定将调用方法的确定也推迟到运行时。在编译时,方法的调用并不和代码绑定 在一起,只有在消实发送出来之后,才确定被调用的代码。通过动态类型和动态绑定技术,您的代码每次执行都可以得到不同的结果。运行时因子负责确定消息的接 收者和被调用的方法。 运行时的消息分发机制为动态绑定提供支持。当您向一个动态类型确定了的对象发送消息时,运行环境系统会通过接收者的isa指针定位对象的类,并以此为起点 确定被调用的方法,方法和消息是动态绑定的。而且,您不必在Objective-C 代码中做任何工作,就可以自动获取动态绑定的好处。您在每次发送消息时, 特别是当消息的接收者是动态类型已经确定的对象时,动态绑定就会例行而 透明地发生。

第 10 题 [多选题] :
表视图的组成有哪些?
答案:ABCD

解析:

第 11 题 [问答题] :
目标-动作机制

解析:目标是动作消息的接收者。一个控件,或者更为常见的是它的单元,以插座变量(参 见”插座变量”部分)
的形式保有其动作消息的目标。 动作是控件发送给目标的消息,或者从目标的角度看,它是目标为了响应动作而实现 的方法。 程序需要某些机制来进行事件和指令的翻译。这个机制就是目标-动作机制。

第 12 题 [单选题] :
以下程序的输出结果是:main(){ int a= 65535; printf("%d%u", a, a);}
答案:C

解析:

第 13 题 [单选题] :
什么是KVO?
答案:A

解析:

第 14 题 [单选题] :
下面程序的输出结果为:
void main(){
  enum Weekday{sun=7,mon=1,tue,wed,thu,fri,sat};
  enum Weekday day=sat;
  NSLog(@"%d ",day);
}
答案:D

解析:

第 15 题 [单选题] :
下面对category描述不正确的是()
答案:B

解析:

第 16 题 [多选题] :
关于浅复制和深复制的说法,下列说法正确的是
答案:ABCD

解析:

第 17 题 [单选题] :
如果你定义继承NSObject一个新类叫“Foo”,怎样创建他的实例
答案:D

解析:

第 18 题 [单选题] :
下面关于线程管理错误的是()
答案:B

解析:

第 19 题 [单选题] :
下面的代码问题在哪?@implementation xxx……-(void) setVar:(int)i {    self.var = i;}
答案:B

解析:

第 20 题 [问答题] :
委托是什么?委托和委托方双方的property声明用什么属性?为什么?

解析:委托:一个对象保存另外一个对象的引用,被引用的对象实现了事先确定的协议,该协议用于将引用对象中的变化通知给被引用对象。 委托和委托方双方的property声明属性都是assign而不是retain 为了避免循环引用造成的内存泄露。 循环引用的问题这样理解: 现在执行[Arelease];[Brelease];此时创建对象的main函数已经释放了自己对对象的所有权,但是此时A和B的引用计数都还是1,因为他们互相引用了。 这时你发现A和B将无法释放,因为要想释放A必须先释放B,在B的dealloc方法中再释放A。同理,要想释放B必须先释放A,在A的dealloc方法中再释放B。所以这两个对象将一直存在在内存中而不释放。这就是所谓的循环引用的问题。 要想解决这个问题,一般的方法可以将引用的属性设置为assign,而不是retain来处理。