ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:23.41KB ,
资源ID:4018699      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4018699.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(iOS面试题OC部分9347485.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

iOS面试题OC部分9347485.docx

1、iOS面试题OC部分9347485OC部分1.Objective-C可以实现多继承吗?可以实现多个接口吗?Category是什么?重写一个类的方式是用继承好还是用分类好?为什么?2.OC使用协议实现多继承,可以遵守多个协议实现多接口。category是OC中的类别,类别是用于给一个现有类添加新方法。重写类一般采用继承的方式,分类(类别)在给以个类添加同名方法后,会造成原有类中方法的实效,而继承重写的方法,依然可以在使用父类对象调用该方法。3.定义属性的时候,什么时候使用retain/copy/assign?写一个setter方法,用于完成property(nonatomic,retain) N

2、SString* name; 写一个setter方法,用于完成property(nonatomic,copy) NSString* name; retain 用于保留对象的引用计数,在使用retain声明的属性做赋值的时候,成员变量指针会保留被赋值对象的引用计数。copy 声明的属性,在使用属性赋值的时候会,成员指针会指向新副本,这个副本是一个不可变副本,不论赋值对象是不是可变的。assign 用于基本数据类型的属性声明,不涉及到内存管理的问题,也是缺省参数retain声明的属性的setter方法展开- (void)setName:(NSString*)name if(_name != nam

3、e) _name release; _name = name retain; copy声明的属性的setter方法展开- (void)setName:(NSString*)name if(_name != name) _name release; _name = name copy; 4.什么时候使用NSMutableArray/什么时候使用NSArrayNSMutableArray 一般在需要随时更改数组结构的时候使用NSArray 一般用于保存一些不需要修改逻辑的数据5.实现字符串“I LOVE CHINA”反串成“CHINA LOVE I”6. pch文件 的作用.pch表示precom

4、piled header,这是一个你工程要用到的来自于外部框架的头文件列表。xcode将编译这些头到文件,这将减少你在选择Build 或Build and Go时编译项目的时间。通常用到的头文件已经自动包含了pch,系统编译每个cpp文件前,都会先include这个文件。这样就节省了添加include的时间,相当于加速编译还有就是可以再这里面放入宏,在整个工程中都可以用7. 怎样解决重复编译#ifndef _DEBUG #ifdef USE_MYLIB . #endif8. awakeFromNib与viewDidLoad区别awakeFromNib当.nib文件被加载的时候,会发送一个awa

5、keFromNib的消息到.nib文件中的每个对象,每个对象都可以定义自己的 awakeFromNib函数来响应这个消息,执行一些必要的操作。也就是说通过nib文件创建view对象是执行awakeFromNib 。viewDidLoad 当view对象被加载到内存是就会执行viewDidLoad,所以不管通过nib文件还是代码的方式创建对象都会执行viewDidLoad。9. LayoutSubviews何时会被调用当要调整subViews时候,需要重写layoutSubviews方法。1:初始化init方法时候不会触发。 2:滚动UIScrollView时会触发3:旋转UIScreen时会触

6、发4:当改变view的值时候会触发,前提是frame前后值发生了变化5:当改变UIview的大小时候会触发10. public/private/protected的具体区别public公共,加上这个修饰的类或属性,可以在同一个包或者别的包里面访问private私有的,加上这个修饰的类或属性,只能在同类里访问,同包和别的包不能访问protected保护,加上这个修饰的类或属性,只能在类和同包访问,别的包不能访问11. ARC是什么ARC是iOS 5推出的新功能,全称叫 ARC(Automatic Reference Counting)。简单地说,就是代码中自动加入了retain/release,

7、原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了。该机能在 iOS 5/ Mac OS X 10.7 开始导入,利用 Xcode4.2 可以使用该机能。简单地理解ARC,就是通过指定的语法,让编译器(LLVM 3.0)在编译代码时,自动生成实例的引用计数管理部分代码。有一点,ARC并不是GC,它只是一种代码静态分析(Static Analyzer)工具。12.写一个“标准”宏,这个宏输入两个参数并返回较小的#define MIN(X,Y) (X)(Y)?(Y):(X)13. Objective-c中有多重继承么?不是的话有声明替代方式?没有多继承,可以通过协议模拟多继

8、承14. Objective-c中有私有方法吗?私有变量呢?没有私有方法,但可以将方法直接实现在.m文件中不在.h文件中声明时,外部也不能访问。有私有变量15. iPhone OS中有没有垃圾回收?没有16. 常见的object-c的数据类型有哪些,和c的基本类型有什么区别答:常见的object-c的数据类型有NSInteger、CGFloat、NSString、NSNumber、NSArray、NSData,NSInteger会根据系统是32位还是64位来决定是本身是int还是Long,CGFloat会根据系统是32位还是64位来决定是本身是float还是double,NSString、NS

9、Number、NSArray、NSData都是指针类型的对象,在堆中分配空间,而c语言中的char,等都是在栈中分配空间17. id声明的对象有什么特性?id声明的对象具有运行时的特性,即可以指向任意类型的objcetive-c的对象;18. 想nil对象发送消息会发生什么?答:在Objective-C中向nil发送消息是完全有效的,只是在运行时不会有任何作用。19. 什么是block?block实现原理?答:block是一个特殊的OC对象, 它建立在栈上, 而不是堆上, 这么做一个是为性能考虑,还有就是方便访问局部变量。默认情况下block使用到的局部变量都会被复制,而不是保留。所以它无法改

10、变局部变量的值。如果在变量面前加上_block, 那么编译器回去不会复制变量, 而是去找变量的地址, 通过地址来访问变量, 实际上就是直接操作变量。另外block是在栈上分配的, 所以一旦离开作用域, 就会释放, 因此如果你要把快用在别的地方, 必须要复制一份。block是不能保留的, retain对块没有意义。20. C+和OC,JAVA和OC之间的区别?C+是功能强大,丰富的面向对象编程语言,具有私有、公有、保护权限的三种成员变量和成员方法,具有私有、公有、保护三种继承方式,具有重写,重载,虚函数,虚基类等多态方式,通过虚基类实现代理回调。自定义类可以没有父类。另外具备向量,模板,友元,重

11、载运算符等多种独特语法Obj-C是针对mac OS和iOS设备应用程序开发的专属编程语言,采用动态继承,消息方法机制,没有真正的重写机制,没有私有方法,继承方式为公有,具备协议,类别,Block等独有的语法,万用父类为NSObjectJAVA是老牌的面向对象语言,编写的程序在JAVA虚拟机上运行,真正实现了一次编译到处运行,具有复杂的内存回收机制,单继承模式,接口语法类似Obj-C的协议21. 抽象与接口的区别?声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstrac

12、t 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法

13、。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。22. nil与NULL的区别?从Objective-C语言的官方说法上看,nil表示指向对象的指针即所谓对象的引用为空,NULL表示指向基础类型变量即C语言变量的指针为空。如果在非ARC程序的编写过程中,两个空是可以互换的,但是在ARC环境下,普通指针和对象引用被严格限制,不能交换使用,因此也应尽量不互换使用nil与NULL23. BOOL与bool的区别?

14、bool是C语言C99标准中增添的变量类型,Object-C仅仅是从C语言继承了这种类型,该类型有true和false两个值,表示真和假。BOOL是Obj-C独有的布尔类型,有YES和NO两个值,分别是1和0的宏。Obj-C中同时认为所有非0的值都是真值,0为假值24. OC如何实现私有方法?Obj-C语法中并没有私有方法的概念,但是由于Obj-C是通过导入其他类的头文件来获取其他类所拥有的成员方法的声明,因此可以采用编写方法时,不声明,或仅在.m文件中的匿名类别中声明的方式,使方法对外不可见,即可达到方法私有化的目的。但是外部类仍然可以通过selector来访问确实存在的私有方法,因此严格来

15、讲Obj-C确实不能真正实现方法私有化25. #import和#include的区别 class代表什么预编译指令Objective-C:#importC,C+:#include#import由gcc编译器支持在 Objective-C 中,#import 被当成 #include 指令的改良版本来使用。除此之外,#import 确定一个文件只能被导入一次,这使你在递归包含中不会出现问题。使用哪一个还是由你来决定。一般来说,在导入 Objective-C 头文件的时候使用 #import,包含 C 头文件时使用 #include。比如:#import#include#include#impor

16、t比起#include的好处就是不会引起交叉编译二、class是用来做类引用的class就是告诉编译器有这么一个类,至于类的定义是啥不知道class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文件中还是需要使用#import26. NSString和NSMutableString的区别NSString是一个不可变的字符串对象。这不是表示这个对象声明的变量的值不可变,而是表示它初始化以后,你不能改变该变量所分配的内存中的值,但你可以重新分配该变量所处的内存空间。而NSMutableString是可变的,意味着你可以追加它的内存空间,或者修改它所分配的内存空间中的值。27. .关于语

17、句 NSString * str= NSData allocinit,编译和运行分别 str 代表什么对象?首先,声明 NSString *str 是告诉编译器,str是一个指向某个Objective-C对象的指针。因为不管指向的是什么类型的对象,一个指针所占的内存空间都是固定的,所以这里声明成任何类型的对象,最终生成的可执行代码都是没有区别的。这里限定了NSString只不过是告诉编译器,请把str当做一个NSString来检查,如果后面调用了非NSString的方法,会产生警告。接着,你创建了一个NSData对象,然后把这个对象所在的内存地址保存在str里。那么运行时,str指向的内存空间

18、就是一个NSData对象。你可以把str当做一个NSData对象来用。28. socket通信的几个关键步骤面向连接的socket通信就像与对方打电话,首先需要通过电话建立一个连接,连接建立好之后,彼此才能双向通信。它有几个关键步骤服务器端通常以守护进程的方式实现:1: 创建守护进程2:获取或注册服务3:创建socket并绑定地址4:开始监听5:接收客户端连接请求6:进行数据传输客户端1:获取或注册服务2:创建socket3:发送连接请求29. 类别意义? 与继承的区别当我们添加头文件以后,对已知的类,会自动提示你对这个类添加的方法 主要用途,对于原生不会造成破坏,使用原生就可以提示出你的方法

19、30. Core Foundation中提供了哪几种操作Socket的方法?CFNetwork、CFSocket和BSD Socket31. 用id声明的对象有什么特性? 没有 * 号 动态数据类型 可以指向任何类的对象(设置是nil),而不关心其具体类型 在运行时检查其具体类型 可以对其发送任何(存在的)消息32,self.name=“object” name=“object”有什么区别? 前者实际上是调用了set方法给变量赋值 而后者是直接给变量赋值33.shell中,将command1的输出作为command2的输出应该使用的命令是? 重定向命令 command1command234.下

20、面的数据结构中不属于线性结构的是:栈,链表,二叉树,线性表 线性结构:栈,链表,线性表 非线性结构:二叉树35,oc中有没有多继承,如果没有用什么方法替代? 没有 用协议代替多继承36.常见的bjective-C的数据类型有哪些,和的基本数据类型有什么区别中常用数据类型有NSArray,NSDictionary,NSData,NSString,NSMutbleString等等,和的最大区别为OC中的类型是类类型,需要实例化对象才能用。C中是一般数据类型直接操作内存空间37.self.name=“aa”和_name=“aa”的区别答:self.name=“aa”是通过set方法进行赋值,_nam

21、e=“aa”是直接复制给成员变量38.C语言中指针与数组的区别答:指针是变量可以修改指向的方向,数组名是地址常量,不能被修改39.new delete malloc free的含义 c+:new申请内存, delete 释放掉指针指向的内存 c:malloc 动态申请内存,free释放指针指向的内存40.常引用什么时候使用 如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就要使用常引用41.c/oc/c+有什么区别和联系 C相对于C+和OC而言更偏重于逻辑算法,这是因为C是面向过程,C+和OC都是面向对象。C和C+的联系:C是C+的一个自洽子集,C+是C的超集,OC是

22、C的扩展,C+和OC基本兼容C的语法。42.const的用法 const 修饰变量表示该变量是只读变量(有些人管它叫常量),即只能引用而不能修改 const int *p;表示指针变量P指向的数据不能改 int *const p;表示指针变量P的值不能该,或者说是指针P的指向不能改 43.pool release和pool drain有什么区别 drain 和 release 都会促使自动释放池对象向池内的每一个对象发送release消息来释放池内对象的引用计数,但是release触发的这个操作,不会考虑对象是否需要release,而drain会在自动释放池向池内对象发送release消息的时

23、候,考虑对象是否需要release44.自动释放池和GC一样吗,iphone有没有GC 在引用计数环境下,ios是没有垃圾回收的,自动释放池是oc中管理内存的一种方式,它和gc是本质区别的,自动释放池管理内存的前提是,必须把要管理内存的对象加入池内,才会生效。而gc是不断检测当前程序中是否有不再使用的内存进而释放。45.当A类 中的某个方法执行到某处时,这时想在B类中执行某个方法,如何做?并做简单说明 用代理执行代理方法 说明:在b类中实现协议方法,设置a的代理为b,在指定方法内 调用代理的协议方法46.类别的作用?答案:category 可以在不获悉,不改变原来代码的情况下往里面添加新的方法

24、,只能添加,不能删除修改。并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。类别主要有3个作用:(1)将类的实现分散到多个不同文件或多个不同框架中。(2)创建对私有方法的前向引用。(3)向对象添加非正式协议。47. 简述extern C的作用可以在C+中使用C的已编译好的函数模块,在c+中么用到c语言写的函数,声明一下,在DLL中经常看到,避免C+ name mangling,主要用于动态链接库,使得导出函数名称与C语言规则一致(不改变),方便不同的编译器甚至是不同的开发语言调用。extern C是告诉C+编译器以C Linkage方式编译,也就是抑制

25、C+的name mangling机制。编程:1.写出proerty(nonatomic,retain)Person *person;synthesize person具体实现。- (void)setPerson:(Person *)person if(_person != person) _person release; _person = person retain; - (Person *)person return _person;2. 从普通id类型对象转换成数字对象,因为配置了限定词.1f,所以结果四舍五入,并保留一位小数NSDictionary* rowData = NSDicti

26、onarydictionaryWithObjectsAndKeys:46.95,price,nil;NSLog(a double value:%.1f,(NSNumber*)rowData objectForKey:price doubleValue);输出:a double value:47.03,写一个委托的interface #import protocol MyDelegate;/声明 interface MyClass:NSobject id delegate; end protocol MyDelegate/委托方法 -(void) selector:(NSString *) ar

27、gs; end4:请看下面一段代码 static int a=1; int main() int b=2; char* c=NUll; c=(char*)malloc(100*sizeof(char); return 0; 问:1,访问abc三者的效率从高到低依次是 : bca 2,在最坏情况下排序速度最快的是:归并排序 复杂度最高的是:快排 a,快排,冒泡,堆,归并5.看下面的程序= NSMutableArray *arr = NSMutableArray array retain; NSString *str = NSString stringWithFormat:test; str retain; arr addObject:str; NSLog(%lu,str,str retainCount); str retain; str release; str release; NSLog(%lu,str,str retainCount); arr removeObject:str; NSLog(%lu,str,str retainCount);=三次打印的retainCount分别是什么,为什么?答:分别是3,2,1,初始化的时候的为1,retain的时候+1,往数组里add的时候+1,release的时候-1,从数组里移除的时候-1

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1