您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > iOS面试知识点整理
iOS面试常问知识点(必备)1、C知识点 üü写一个标准宏 MIN,这个宏输入两个参数 A、B,并返回较小的一个 #define MIN(a,b) ((ab)?(b):(a)) üü关键字 static的作用是什么 (1)设置变量的存储域,函数体内static变量的作用范围为该函数体,该变量的内存制备分配一次,因此值在下次调用是仍维持上次的值。 (2)限制编制的作用域,在模块的static全局变量只可以被这一模块内的其他函数调用,这个函数的使用范围被限制在声明它的模块内。 (3)限制函数的作用域,同上。 (4)在类中static成员变量意味着被它被该类所有实例所共享,也就是说某个类的实例修改了该静态成员变量,其修改值为该类的其他所有实例所见。 (5)在类中的static成员属于整个类所有,这个函数不接受this指针,因此只能访问类的static成员变量。 üü关键字 const有什么含意 (1)简单说:意味着只读 const int a; int const a; const int *a; int * const a; int const * a const; 前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。如果应试者能正确回答这些问题,那么他就给我留下了一个好印象。顺带提一句,也许你可能会问,即使不用关键字 const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?我也如下的几下理由: (2)通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。 (3)合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。 üü堆和栈的区别一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)― 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2、堆区(heap)一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 .注意它与数据结构中的堆是两回事,分配方式倒是类似于链表 üü不用第三个参数来交换A、B两个变量的值(1)a=a^bb=a^ba=a^b(2)a=a+bb=a-ba=a-büübreak、return和continue的区别break是直接跳出整个循环体return直接跳出函数continue则是跳出当前循环,到下一循环üüint*p中*p和p的分别代表什么*p:该指针指向变量的值p:一个指向某个内存块的一个变量üü写算法对一个长度为n的数组a进行升序排序 选择排序冒泡排序-(void)bunbleSort:(NSMutableArray*)aData{intcount=0;for(inti=0;i[aDatacount]-1;i++){for(intj=i+1;j[aDatacount];j++){if([[aDataobjectAtIndex:i]integerValue][[aDataobjectAtIndex:j]integerValue]){NSNumber*temp=[aDataobjectAtIndex:i];[aDatareplaceObjectAtIndex:iwithObject:[aDataobjectAtIndex:j]];[aDatareplaceObjectAtIndex:jwithObject:temp];count++; üü你常用的数据结构有哪些 1.整型 (int) 浮点型 (float, double) 短长整型(short, long) 2.字符串 NSString* 与 char* 3.布尔值 4.数组与字典 üü写一个单链表 -(void)sort2:(NSMutableArray*)resource{//NSNumber⼩小-⼤大intcount=[resourcecount];for(inti=0;icount-1;i++){for(intj=0;jcount-i-1;j++){if([[resourceobjectAtIndex:j]integerValue][[resourceobjectAtIndex:j+1]integerValue]){NSNumber*temp=[resourceobjectAtIndex:j];[resourcereplaceObjectAtIndex:jwithObject:[resourceobjectAtIndex:j+1]];[resourcereplaceObjectAtIndex:j+1withObject:temp]; üü队列和栈的区别栈:先进后出队列:先进先出üü其他 structQFInfo{intnum;structQFInfo*next;};structQFInfo*qfinfo;//链表头voidinsert_AtFirst(structQFInfo*head,structQFInfo*insert){insert-next=head-next;head-next=insert;}//链表尾voidinsert_AtEnd(structQFInfo*head,structQFInfo*insert){structQFInfo*temp=head-next;while(temp-next!=NULL){temp=temp-next;}insert-next=NULL;temp-next=insert;}//删除voiddelete_1(structQFInfo*head,structQFInfo*del){structQFInfo*temp=head-next;while(temp-next!=NULL&&temp-next!=del){temp=temp-next;}2、OC知识点1.OC字符串和C字符串的区别OC字符串是对象C字符串是字符数组2.OC数组和C数组的区别oc的数组是系统封装好的对象。c的数组则是连续的内存空间。3.什么是面向对象,和面向过程的区别面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用分别的函数来实现,问题就解决了。而面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的i变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了总多步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。4.分别讲一下你对面向对象中封装、继承、多态的理解封装:把东西抽离出来一个类,提供api接口,封装是实现面向对象程序设计的第一步,封装就是将数据或函数等集合在一个个的单元中(我们称之为类)。被封装的对象通常被称为抽象数据类型。继承:继承一个父类,有其父类的所有方法和属性,继承主要实现重用代码,节省开发时间。多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。5.重载和重写的区别重写:子类方法覆盖父类方法,要求方法名和参数都要一样。重载:同一个类的两个以及以上的方法,拥有相同的方法名,但是参数不一样,方法体也不一样,最常见例子就是类的重构函数。6.OC有没有私有方法?如果没有怎么实现方法的私有化严格来说OC没有私有方法,最简单就是在.m中定义方法而不是在.h中。 7.#import和#include的区别#import也是导入头文件,已经预处理。需要导入foundation。8.OC内存管理的机制是什么?assign、retain、copy、strong、weak的区别?OC内存管理机制是ARC,自动引用计数器.assign:用于非指针类型变量,基本数据类型,C数据类型。若描述id类型,retainCount不+1;retain:强指针,retainCount+1copy:浅拷贝,并retainCount+1。strong:有arc后导入的,强指针,retainCount+1;(等价于retain)weak:有arc后导入的,弱指针,retainCount不+1,只能描述对象,并且最后会将该对象设置为nil来防止野指针。9. 写一个简单的代理,实现两个页面的反向传值10. 写一个简单的block,实现两个页面的反向传值11.@class的作用是什么申明一个类12写一个单例方法+(id)shareInstance{staticBlockViewControl*blockVC=nil;@synchronized(self){if(blockVC==nil){blockVC=[[BlockViewControlalloc]init];}}returnblockVC;}GCD方式:+(id)shareInstance{staticBlockViewControl*blockVC=nil;staticdispatch_once_tonceToken;dispatch_once(&onceToken,^{blockVC=[[BlockViewControlalloc]init];});returnblockVC;}13.深拷贝和浅拷贝的区别浅复制复制对象本身,对象里的属性、包含的对象不做复制深复制复制全部,包括对象的属性和其他对象Foundation框架支持复制的类,默认是浅复制14.KVC是什么?KVO是什么?分别什么时候使用?KVC:keyvaluecoding,KVC,即是指NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属性。KVO就是基于KVC实现的关键技术之一。KVO:keyvalueobserving,Key-ValueObserving(KVO)建立在KVC之上,它能够观察一个对象的KVCkeypath值的变化。举个例子,用代码观察一个person对象的address变化,以下是实现的三个方法:•observeValueForKeyPath:ofObject:change:context:在被观察的keypath的值变化时调用。•dealloc要移除观察15你怎么理解MVC开发模式在iOSSDK中的体现?16OC中创建线程的方法有哪几种?分别在什么情况下使用?第一种,使用NSThread第二种,使用NSOperationQueue第三种,使用GCD17iPhone5、iPhone
本文标题:iOS面试知识点整理
链接地址:https://www.777doc.com/doc-6123055 .html