iOS面试题汇总(二)
47.kvc是什么?kvo是什么?有什么特性?
48.响应者链是什么?
49.unix上进程怎么通信?
UNIX主要支持三种通信方式:
1. 基本通信:主要用来协调进程间的同步和互斥
(1)锁文件通信
通信的双方通过查找特定目录下特定类型的文件(称锁文件)来完成进程间 对临界资源访问时的互斥;例如进程p1访问一个临界资源,首先查看是否有一个特定类型文件,若有,则等待一段时间再查找锁文件。
(2)记录锁文件
2. 管道通信:适应大批量的数据传递
3. IPC :适应大批量的数据传递
50.timer的间隔周期准吗?为什么?怎样实现一个精准的timer?
51.UIscrollVew用到了什么设计模式?还能再foundation库中找到类似的吗?(答案众多,不知道哪个是对的~~)
模板(Template)模式,所有datasource和delegate接口都是模板模式的典型应用,
组合模式composition,所有的containerview都用了这个模式
观察者模式observer,所有的UIResponder都用了这个模式。
52如果要开发一个类似eclipse的软件,支持插件结构。且开放给第三方开发。你会怎样去设计它?(大概思路)
53. main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
}
答:2,5
*(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2.5 ,&a+1不是首地址+1,系统会认为加一个a数组的偏 移,是偏移了一个数组的大小(本例是5个int,int *ptr=(int *)(&a+1); 则ptr实际 是&(a[5]),也就是a+5 原因如下:
&a是数组指针,其类型为 int (*)[5]; 而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同。a是长度为5的int数组指针,所以要加 5*sizeof(int)所以ptr实际是a[5],但是prt与(&a+1)类型是不一样的(这点很重要),所以prt-1只会减去sizeof(int*),a,&a的地址是一样的,但意思不一样,a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5].
54. 以下为Windows NT下的32位C++程序,请计算sizeof的值 voidFunc ( char str[100] ) { sizeof( str ) =? } void *p = malloc( 100 ); sizeof ( p ) = ?
答案:这题 很常见了,Func( char str[100] )函数中数组名作为函数形参时,在函数体内,数组名失去了本身的内涵,仅仅只是一个指针;在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。Windows NT 32位平台下,指针的长度(占用内存的大小)为4字节,故sizeof( str ) 、sizeof( p ) 都为4。
55.- (void)*getNSString(const NSString *inputString)
{ inputString =@"This is a main test\n";
return ;}
-main(void)
{NSString *a=@"Main";
NSString *aString = [NSStringstringWithString:@"%@",getNSString(a)];
NSLog(@"%@\n", aString);}
最后问输出的字符串:NULL,output在 函数返回后,内存已经被释放。
相关新闻>>
- 发表评论
-
- 最新评论 更多>>