iOS基础知识面试题合集1.#IMPORT和#INCLUDE的区别@CLASS?32.READWRITE,READONLY,ASSIGN,RETAIN,COPY,NONATOMIC属性的作用33.在一个对象的方法里面:SELF.NAME=“OBJECT”;和NAME=”OBJECT”有什么不同吗?34.请简述SELF.NAME=NIL的机制,以及与[NAMERELEASE]的区别?35.请简要说明VIEWDIDLOAD和VIEWDIDUNLOAD何时调用36.实例化一个UITABLEVIEW对象,要求写出关键语句?37.使用SQL语句查询出省名以湖开头,邮编为436001所在的市区?(5分)(表名及字段名自定义)48.打印结果49.用预处理指令#DEFINE声明一个常数,用以表明1年中有多少秒(忽略闰年问题)510.写一”标准”宏MIN,这个宏输入两个参数并返回较小的一个511.数组和指针的区别512.STATIC的作用513.简述内存分区情况614.#INCLUDEFILENAME和#INCLUDE”FILENAME”有什么区别615.CONSTCHAR*P;CHARCONST*P;CHAR*CONSTP;CONSTCHAR*CONSTP;四个修饰指针有什么区别616.MVC的理解?617.在OBJ-C中有没有私有方法?私有变量?一般采用什么方法实现?618.OC中加号方法与减号的区别?719.FREE与RELEASE的区别720.在终端环境下,分别说明4,2,1,0对应的权限是什么721.ARC机制722.自动释放池是什么,如何工作723.VIEWCONTROLLER的LOADVIEW,VIEWDIDLOAD,VIEWDIDUNLOAD分别是在什么时候调用的?在自定义VIEWCONTROLLER的时候这几个函数里面应该做什么工作?824.浅复制和深复制的区别?//浅拷贝和深拷贝825.FRAME和BOUNDS有什么不同?826.OBJ-C的优缺点827.用变量A给出下面的定义828.写出几个死循环?929.队列和栈有什么区别:930.HTTP协议中,POST和GET的区别是什么?931.IOS的系统架构分为(核心操作系统层THECOREOSLAYER)、(核心服务层THECORESERVICESLAYER)、(媒体层THEMEDIALAYER)和(COCOA界面服务层THECOCOATOUCHLAYER)四个层次。1032.控件主要响应3种事件:(基于触摸的事件)、(基于值的事件)和(基于编辑的事件)。1033.XIB文件的构成分为哪3个图标?都具有什么功能。(10分)1034.简述视图控件器的生命周期(10分)。1035.动画有基本类型有哪几种;表视图有哪几种基本样式(10分)?1036.实现简单的表格显示需要设置UITABLEVIEW的什么属性、实现什么协议(10分)?1037.COCOATOUCH提供了哪几种COREANIMATION过渡类型(10分)?1038.UIVIEW与CLAYER有什么区别(10分)?1039.链表翻转。1140.链表逆序(C语言)(10分)。1141.QUATRZ2D的绘图功能的三个核心概念是什么并简述其作用(10分)。1142.IPHONEOS主要提供了几种播放音频的方法(10分)?1143.使用AVAUDIOPLAYER类调用哪个框架、使用步骤(10分)?1144.有哪几种手势通知方法、写清楚方法名(10分)?1245.实例化一个UITABLEVIEW对象,要求写出关键语句(10分)。1246.CFSOCKET使用有哪几个步骤(10分)。1247.COREFOUNDATION中提供了哪几种操作SOCKET的方法(10分)?1248.解析XML文件有哪几种方式(10分)?1249.自定义一个委托(15分)。1250.类别的作用?继承和类别在实现中有何区别?1351.通知和协议的不同之处?1352.关于多态性1353.对于单例的理解1354.是否在一个视图控制器中嵌入两个TABLEVIEW控制器?1355.一个TABLEVIEW是否可以关联两个不同的数据源?你会怎么处理?1356.OBJECT-C的类可以多重继承么?可以实现多个接口么?重写一个类的方式用继承好还是分类好?为什么?1457.ID声明的对象有什么特性?1458.自动释放池跟GC(垃圾回收)有什么区别?IPHONE上有GC么?[POOLRELEASE]和[POOLDRAIN]有什么区别?1459.线程与进程的区别和联系?1460.IOS平台怎么做数据的持久化?COREDATA和SQLITE有无必然联系?COREDATA是一个关系型数据库吗?1461.OBJ-C有多重继承么?如果没有什么替代方法?1462.OBJ-C有私有方法么?私有变量呢?1563.假定输入的字符串中只包含字母和*号。编写函数FUN,功能是,除了中间和尾部的*号外,1564.截取字符串”20|“中‘|’字符前面及后面的数据,分别输出它们(10分)。1565.获取项目根路径,并在其下创建一个名称为USERDATA的目录。(10分)。1566.TABLEVIEW的重用机制(10分)?1667.这段代码有什么问题吗1668.用变量A给出下面的定义1669.给定一个字符串,输出本字符串中只出现一次并且最靠前的那个字符的位置?1770.OBJECTIVE-C中的数字对象都有哪些,简述它们与基本数据类型的区别是什么?1871.用NSLOG函数输出一个浮点类型,结果四舍五入,并保留一位小数1873.获取项目根路径,并在其下创建一个名称为USERDATA的目录。1974.DO-WHILE与WHILE-DO的区别?1975.用C语言,求2到100内的所有素数和。1976.单件实例是什么(10分)。2077.自动释放池是什么,如何工作。201.#import和#include的区别@class?@class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文件中还是需要使用#import而#import比起#include的好处就是不会引起交叉编译2.readwrite,readonly,assign,retain,copy,nonatomic属性的作用@property是一个属性访问声明,扩号内支持以下几个属性:1,getter=getName,setter=setName,设置setter与getter的方法名2,readwrite,readonly,设置可供访问级别2,assign,setter方法直接赋值,不进行任何retain操作,为了解决原类型与环循引用问题3,retain,setter方法对参数进行release旧值再retain新值,所有实现都是这个顺序(CC上有相关资料)4,copy,setter方法进行Copy操作,与retain处理流程一样,先旧值release,再Copy出新的对象,retainCount为1。这是为了减少对上下文的依赖而引入的机制。5,nonatomic,非原子性访问,不加同步,多线程并发访问会提高性能。注意,如果不加此属性,则默认是两个访问方法都为原子型事务访问。锁被加到所属对象实例级(我是这么理解的…)。3.在一个对象的方法里面:self.name=“object”;和name=”object”有什么不同吗?答:self.name=”object”:会调用对象的setName()方法;name=“object”:会直接把object赋值给当前对象的name属性。4.请简述self.name=nil的机制,以及与[namerelease]的区别?self.name=nil;//使用nil参数调用setName:方法[namerelease]生成的访问器将自动释放以前的name对象5.请简要说明viewDidLoad和viewDidUnload何时调用答:viewDidLoad在view从nib文件初始化时调用,loadView在controller的view为nil时调用。此方法在编程实现view时调用,view控制器默认会注册memorywarningnotification,当viewcontroller的任何view没有用的时候,viewDidUnload会被调用,在这里实现将retain的viewrelease,如果是retain的IBOutletview属性则不要在这里release,IBOutlet会负责release。6.实例化一个UITableView对象,要求写出关键语句?答:UITableView*my=[[UITableViewalloc]initWithFrame:(CGRect)framestyle:(UITableViewStyle)style];my.delegate=self;my.dataSource=self;首先需要分配空间设置表格类型然后需要设置两个必须的委托对象。7.使用sql语句查询出省名以湖开头,邮编为436001所在的市区?(5分)(表名及字段名自定义)select*fromcityswherepostcode=436001andprovince=’湖%’;8.打印结果main(){inta[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].voidFunc(charstr[100]){sizeof(str)=?}void*p=malloc(100);sizeof(p)=?这题很常见了,Func(charstr[100])函数中数组名作为函数形参时,在函数体内,数组名失去了本身的内涵,仅仅只是一个指针;在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。WindowsNT32位平台下,指针的长度(占用内存的大小)为4字节,故sizeof(str)、sizeof(p)都为4。9.用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)答:#defineSECONDS_PER_YEAR(60*60*24*365)UL我在这想看到几件事情:#define语法的基本知识(例如:不能以分号结束,括号的使用,等等)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。10.写一”标准”宏MIN,这个宏输入两个参数并返回较小的一个答:#defineMIN(A,B)((A)=(B)?(A):(B))这个测试是为下面的目的而设的:标识#define在宏中应用的基本知识。这是很重要的,因为直到嵌入(inline)操作符变为标准C的一部分,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为