iOS 面试题

来源:互联网 发布:德运淘宝旗舰店 编辑:程序博客网 时间:2024/06/06 02:42

1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?

oc的类不可以多重继承,可以实现多个接口,通过多个接口可以实现c++的多重继承;category是类别,类别可以不改变原有代码情况下往里面添加新的方法,只能添加不能删除和修改,如果方法和原有类中的方法相同,则会覆盖原来的方法。

2. #import 跟#include 又什么区别,@class呢, #import<> 跟 #import””又什么区别?

 #import 是oc导入头文件的关键字,只会导入一次,不会重复导入;@class 是告诉编译器声明某个类;#include是c/c++导入头文件的关键字,#import<>是导入系统文件头文件,#import””用来包含用户头文件。

3. 属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用?

1). readwrite可读可写特性,生成getter方法和setter   2). readonly只读属性,只会生成getter方法 不会生成setter方法 3). assign 是赋值特性,用于基本数据类型  4). retain 表示持有特性,setter方法先保留再赋值,引用计数加1  5). copy 表示赋值特性,setter方法将传入对象复制一份,引用计数加16).nonatomic 非原子操作 效率高效 atomic表示多线程安全

 

5.对于语句NSString*obj = [[NSData alloc] init]; obj在编译时和运行时分别时什么类型的对象?

编译时是NSString类型  运行时是NSData类型

6.常见的object-c的数据类型有那些, 和C的基本数据类型有什么区别?如:NSInteger和int

NSString NSNumber NSArray NSMutableArr NSData NSInteger会根据系统自动判断是int还是Long

7.id 声明的对象有什么特性?

ID 可以指向任何OC对象

8.Objective-C如何对内存管理的,说说你的看法和解决方法?

OC内存管理 包含ARC 非ARC 内存池 

9. 原子(atomic)跟非原子(non-atomic)属性有什么区别?

atomic提供线程安全 non-atomic效率高

11. 内存管理的几条原则时什么?按照默认法则.那些关键字生成的对象需要手动释放?在和property结合的时候怎样有效的避免内存泄露?

谁申请谁释放  关键字 alloc new 生成的对象需要手动释放

12.如何对iOS设备进行性能测试?

静态动态设置

13. Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么?

线程创建方法有三种 NSThread GCD NSOperation 方法是performSelectorOnMainThread 如果想延时执行代码可以用performSelector:onThread:withObject:waitUntilDone:

14. MVC设计模式是什么? 你还熟悉什么设计模式?

单例模式 只创建一次对象

代理模式 比如在一个 view里面有个点击按钮写个代理 然后在控制器包含代理,实现点击方法,或者通过代理进行传递值。

观察者模式 监听某个事物的变化

15 浅复制和深复制的区别?

判读深浅拷贝只需看内存地址是否一样 内存地址一样就是浅拷贝 不一样就是深拷贝

16. 类别的作用?继承和类别在实现中有何区别?

类别的作用可以在不改变原有代码的情况下增加一个新的方法,不能删除和修改,如果方法和原来类方法一致,则会覆盖原来的方法;继承可以增加,修改,删除方法,并且可以增加属性。

17. 类别和类扩展的区别。

两者的区别在于 是否可以添加属性  类扩展可以添加属性 添加方法是必须要实现的。扩展可以认为是一个私有的类别

18. oc中的协议和java中的接口概念有何不同?

OC中的代理有2层含义,官方定义为 formal和informal protocol。前者和Java接口一样。

19. 什么是KVO和KVC?

KVC 键-值编码 可以直接通过key 访问对象的属性
KVO 键-值观察者模式 观察某个属性的变化 如监听输入框实时输入的值

20. 代理的作用?

传值

21. oc中可修改和不可以修改类型。

比如NSArray和NSMutableArray。前者在初始化后的内存控件就是固定不可变的,后者可以添加等,可以动态申请新的内存空间。

22. 我们说的oc是动态运行时语言是什么意思?

多态。 主要是将数据类型的确定由编译时,推迟到了运行时。

23. 通知和协议的不同之处?

通知可以一对多,一条消息可以发送多个对象

代理一对一

24. 什么是推送消息?

向客户推送消息

25. 关于多态性

比如打印机可以打印黑白 彩色 等 子类指针可以赋值给父类

26. 对于单例的理解

只创建一次对象

27. 说说响应链

事件响应链 

28. frame和bounds有什么不同?

frame 父类坐标为参考点
bounds 本身坐标为参考点

29. 方法和选择器有何不同?

@selector 是一个方法的名字  method包含了名字和实现

30. OC的垃圾回收机制?

OC2.0有Garbage collection,但是iOS平台不提供


31. NSOperation queue?

存放NSOperation的

32. 什么是延迟加载?

只有用到的时候才初始化

33. 是否在一个视图控制器中嵌入两个tableview控制器?

一个视图控制只提供了一个View视图

34. 一个tableView是否可以关联两个不同的数据源?你会怎么处理?

我觉得可以设置多个数据源

35. 什么时候使用NSMutableArray,什么时候使用NSArray?

需要新增和删除等操作用NSMutableArray 固定不变可以用NSArray

36. 给出委托方法的实例,并且说出UITableVIew的Data Source方法

UITableVIew的Data Source方法有- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

37. 在应用中可以创建多少autorelease对象,是否有限制?

答案:无

38. 如果我们不创建内存池,是否有内存池提供给我们?

答:界面线程维护着自己的内存池,用户自己创建的数据线程,则需要创建该线程的内存池

39. 什么时候需要在程序中创建内存池?

答:用户自己创建的数据线程,则需要创建该线程的内存池

40. 类NSObject的那些方法经常被使用?

其中类方法alloc、class、 description 对象方法init、dealloc、– performSelector:withObject:afterDelay:等经常被使用

41. 什么是简便构造方法?

答:简便构造方法一般由CocoaTouch框架提供,如NSNumber的 + numberWithBool: + numberWithChar: + numberWithDouble: + numberWithFloat: + numberWithInt:

42. 如何使用Xcode设计通用应用?

MVC

43. UIView的动画效果有那些?

答:有很多,如 UIViewAnimationOptionCurveEaseInOut UIViewAnimationOptionCurveEaseIn UIViewAnimationOptionCurveEaseOut UIViewAnimationOptionTransitionFlipFromLeft UIViewAnimationOptionTransitionFlipFromRight UIViewAnimationOptionTransitionCurlUpUIViewAnimationOptionTransitionCurlDown

44. 在iPhone应用中如何保存数据?

1).通过web服务,保存在服务器上

2).通过NSCoder固化机制,将对象保存在文件中

3).通过SQlite或CoreData保存在文件数据库中

45. 什么是coredata?

答:coredata是苹果提供一套数据保存框架,其基于SQlite

46. 什么是NSManagedObject模型?

NSManagedObject是NSObject的子类

47. 什么是NSManagedobjectContext?

答:NSManagedobjectContext对象负责应用和数据库之间的交互。

48. 什么是谓词?

谓词是NSPredicate 通过给定的逻辑条件完成数据筛选

49. 和coredata一起有哪几种持久化存储机制?

文件 保存到NSUserDefault plist Sqlite

50. 谈谈对Block 的理解?并写出一个使用Block执行UIVew动画?

可以获取局部变量的匿名函数 [UIView animationView.....]

51. 写出上面代码的Block的定义。

1
2
typedef?void(^animations)?(void);
typedef?void(^completion)?(BOOL?finished);


52. 试着使用+ beginAnimations:context:以及上述Block的定义,写出一个可以完成

1
+?(void)transitionWithView:(UIView?*)view?duration:(NSTimeInterval)duration?options:(UIViewAnimationOptions)options?animations:(void?(^)(void))animations?completion:(void?(^)(BOOL?finished))completion?NS_AVAILABLE_IOS(4_0);

53. 做过的项目是否涉及网络访问功能,使用什么对象完成网络功能?

AFNetWorking 

54. 简单介绍下NSURLConnection类及+ sendSynchronousRequest:returningResponse:error:与– initWithRequest:delegate:两个方法的区别?

答: NSURLConnection主要用于网络访问,其中+ sendSynchronousRequest:returningResponse:error:是同步访问数据,即当前线程会阻塞,并等待request的返回的response,而– initWithRequest:delegate:使用的是异步加载,当其完成网络访问后,会通过delegate回到主线程,并其委托的对象。

55. 多线程是什么

完成多项任务,提高了资源的使用效率

58. block

能够读取其它函数内部变量的函数,简洁

66. C和obj-c 如何混用

 

iOS中arc的设置与使用-fobjc-arc或者-fno-objc-arc


67. Objective-C堆和栈的区别?

1.栈区(stack):由编译器自动分配释放
2.堆区(heap):一般由程序员分配释放

68. ViewController的didReceiveMemoryWarning怎么被调用:

答:[supper didReceiveMemoryWarning];

71.写一个”标准"宏MIN ,这个宏输入两个参数并返回较小的一个。

#define MIN(A,B) ((A) <= (B) ? (A) : (B))

75 . static 关键字的作用:

static作用范围为该函数体,下次调用仍维持下次的值

76. 线程与进程的区别和联系?

一个程序就是一个进程 一个进程宝航多个线程

82. cocoa touch框架

83. 自动释放池是什么,如何工作

当您向一个对象发送一个autorelease消息时,池中所有对象就会被释放。

87. http和scoket通信的区别。

http请求方式是客户端主动发请求,服务器才能响应,一次请求完毕后断开。

scoket 双方 都可以主动发送数据 长链接 一般在游戏开发活着股票开发要求即时性并要求发送数据量较大的情况。


88. TCP和UDP的区别

TCP注重数据安全 而UDP数据传输快一点,但安全性一般

89. 你了解svn,cvs等版本控制工具么?

答: 版本控制 svn,cvs 是两种版控制的器,需要配套相关的svn,cvs服务器。

91. 静态链接库

.a文件在不同的工程中如果导入此文件就可以使用里面的类

92. fmmpeg框架

音视频编解码框架

93. fmdb框架

答:数据库框架,对sqllite的数据操作进行了封装,使用着可把精力都放在sql语句上面。

95. 在一个对象的方法里面:self.name= “object”;和 name =”object” 有什么不同吗?

self.name= “object” 会调用对象的 setName方法 而 name =”object” 会把object直接赋值给name属性

96. 请简要说明viewDidLoad和viewDidUnload何时调用

viewDidLoad 在view 从nib文件初始化时调用,此方法在编程实现view时调用,view控制器默认会注册memory warning notification,当view controller的任何view没有用的时候,viewDidUnload会被调用

99. HTTP协议中,POST和GET的区别是什么?

1).GET 方法

GET方法提交数据不安全,数据置于请求行,客户端地址栏可见,POST数据在请求体里面。


105. ?实现简单的表格显示需要设置UITableView的什么属性、实现什么协议?

dataSource和delegate 

106. ?Cocoa Touch提供了哪几种Core Animation过渡类型?

答: Cocoa Touch 提供了 4 种 Core Animation 过渡类型,分别为:交叉淡化、推挤、显示和覆盖。

107. ?UIView与CLayer有什么区别?

UIView 是所有的界面元素都继承它,CLayer是一个绘图类,用于设置一些绘图效果。

111. ?有哪几种手势通知方法、写清楚方法名?

答:

-(void)touchesBegan:(NSSet*)touchedwithEvent:(UIEvent*)event;

-(void)touchesMoved:(NSSet*)touched withEvent:(UIEvent*)event;

-(void)touchesEnded:(NSSet*)touchedwithEvent:(UIEvent*)event;

-(void)touchesCanceled:(NSSet*)touchedwithEvent:(UIEvent*)event;

114. ?解析XML文件有哪几种方式?

答:以 DOM 方式解析 XML 文件;以 SAX 方式解析 XML 文件;

115. ios 平台怎么做数据的持久化?coredata 和sqlite有无必然联系?coredata是一个关系型数据库吗?

iOS 中可以有四种持久化数据的方式:属性列表(plist)、对象归档、 SQLite3 和 Core Data;

116. ?tableView 的重用机制?

tableView通过重用单元格达到节省内存的目的














 



























原创粉丝点击