面试题整理

1.http和scoket通信的区别

2.mvc设计模式是什么?你还熟悉什么设计模式?
3.fmdb框架(了解一下)
4.什么是沙盒模型?哪些操作是属于私有api范畴?
5.什么时候用delegate,什么时候用Notification?
6.写一个委托的interface
8.obj-c有多重载么?不是的话有什么代替方法?
9.关键字const有什么含义?修饰类呢?static的作用,用于类呢?还有extenrn c的作用
10.ARC和垃圾回收机制的区别
11.指出一下程序存在的问题,并且修正

    NSMutableArray *array1 = [NSMutableArray arrayWithArray:@[@"1",@"2",@"3"]];
    NSMutableArray *array2 = [array1 copy];
    [array2 addObject:@"4"];

12.NSString的属性使用的是strong 还是copy,为什么?
13.如果解决循环引用
14.tableView的重用机制
答:查看UITableView头文件,会找到NSMutableArray *visiableCells和NSMutableArray *reusableTableCells两个结构,visableCells内保存当前显示的cells,reusableCells保存可重用的cells,TableView显示之初,reusableTableCells为空那么tableView dequeueReusableCellWithIdentifier:CellIdentifier返回nil,开始的cell都是通过[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:Celldentifier]来创建,而且cellForRowAtIndexPath只是调用最大显示的cell的次数。比如:有100天数据,iPhone一屏最多显示10cell。程序最开始显示TableView的情况是:

  • 用[[UITableVIewCell alloc]initWithStyle:UITableViewCellsStyleDefault reuseIdentifier:CellIdentifier]创建10次cell,并给cell指定同样的重用标识符(当然,可以为不同类型的cell指定不同的标识)。并且10个cell全部都加入到visiableCells数组,reusableTableCells为空。
  • 向下拖动tableView,当cell1完全移出屏幕,并且cell11(它也是alloc出来的,原因同上)完全显示出来的时候。cell11加入到visiableCells,cell1移出visiableCells,cell1加入到reusableIeTableCells。
  • 接着向下拖动tableView,因为reusableTableCells中已经有值,所以,当需要显示新的cell,cellForRowAtIndexPath再次被调用的时候,tableView dequeueReusableCellWithIdentifier:CellIdentifier,返回cell1,cell1加入到visiableCells,cell1移出reusableTableCells;cell2移出visiableCells,cell2加入到reusableTableCells。之后再需要显示的Cells就可以正常从用了。
    15.frame和bounds的区别
    16.多线程的几种方案
    17.- (void)willMoveToWindow:(UIWindow *)newWindow 这个方法什么时候调用
    18.NSNotification和delegate的区别
    19.指出一下程序是否有问题,如果有问题请修正
for (int i = 0; i < 10000000; i++) {
        UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%d",i] ofType:@".png"]];
        //执行某些方法
    }

20.category和extension有什么区别
21.讲讲Objective-C的内存管理
22.请阐述UIVIewController生命周期相关的方法和执行顺序
23.在一个webView上输入http://www.baidu.com到最终打开页面,请描述中间经历的过程
24.阐述视图控制器的生命周期
25.UIView与CLayer有什么区别(2)
26.iOS怎么做数据的持久化
27.描述你所理解的RunLoop
30.简要描述GCD,NSOperation,NSTread
- NSOperation 与GCD的区别
1).GCD
- a.GCD是ios4.0推出的,主要针对多核cpu多核做了优化,是C语言的技术
- b.GCD是将任务(block)添加到队列(串行、并行、全局、主队列)。并且以同步/异步的方式,执行任务的函数
- c.GCD提供了一些NSOperation不具备的功能
1.一次性执行
2.延迟执行
3.调度组
2)NSOperation
- a.NSOperation是iOS2.0推出的,iOS4.0之后重写了NSOperation
- b.NSOperation将操作(异步的任务)添加到队列(并发队列),就会执行指定操作的函数
- c.NSOperation里提供的方便的操作
1.最大并发数
2.队列的暂停/继续
3.取消所有操作
4.指定操作之间的依赖关系(GCD可以用同步实现)
3)GCD与NSThread的区别
- a.NSThread通过@selector指定要执行的方法,代码分散
- c.GCD通过block指定要执行的代码,代码集中,所有的代码系在一起的,让代码更加简单,易于阅读和维护
- d.使用GCD不需要管理线程的创建/销毁/复用的工程!程序员不用关心线程的生命周期
- e.如果要开多个线程NSThread必须实例化多个线程对象
- f.NSThread靠NSObject的分类方法实现的线程间通讯,GCD靠block;
31.BAD_ACCESS在什么情况下出现?,怎么调试EXC_BAD_ACCESS错误?
32.请描述你所了解的设计模式,举例并描述使用场景
33.不手动指定autoreleasepool的前提下,一个autorealese对象在什么时刻释放?(比如子一个vc的viewDidLoad中创建)
34.分别描述Swift和OC中访问限制有哪些
35.描述KVC和KVO
36.分别描述类别(categories)和延展(extensions)是什么?以及两者的区别?继承和类别在实现中有和区别?为什么Category只能为对象添加方法,却不能添加成员变量
37.举例编程,这里有一个整数数据int a[13] = {1,5,10,13,17,56,12,67,23,65,77,81,93};
1.使用递归好冒泡法进行由大到小排序
2.请使用二分法查找数据77
38.什么是method swizzling?
39.如何提高性能的给UIImageView加个圆角?
40.GCD里面有哪几种Queue?,你自动建立过串行queue吗?背后的线程模型是什么样的?
41.What is advantage of categories? What is difference between implementing a category and inheritance?
42.在网络差的情况下,特定的一个网络请求可能会耗时2-4秒,此时怎么做提高用户体验
43.在App中混合HTML5开发App如何实现的,在App中使用HTML5的优缺点是什么?
44.描述一下iOS的内存管理,在开发中对于内存的使用和优化包含哪些方面。我们在开发中应注意哪些问题
45.用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
46.写一“标准”宏MIN ,这个宏输入两个参数并返回较小的一个
47.数组和指针的区别
48.static的作用
49.简述内存分区情况
50.#include和#include “filename” 有什么区别
51.const char *p ;charconst *p;char *const p;c..四个修饰指针有什么区别
52.简述NotificationCenter,KVC,KVO,Delegate?并说明他们之间的区别
53.iOS本地数据存储都有哪几种方式?
54.写出方法获取iOS内存使用情况
55.请简单写出增,删,改,查的SQL语句
56.分析json,xml的区别?json,xml解析方式的底层是如何处理的
57.多线程,如GCD,NSOperationQueue的特征和区别
58.socket连接与http连接
59.单例目的是什么,并简单写出一个案例?
60.请解释一下keywords的区别:assign weak,__block vs __weak
61.用@property声明的NSString(或者NSArray,NSDictionary)经常使用copy关键字,为什么?如果改用strong关键字,可能造成什么问题?
62.对数组中的元素去重复
例如
NSArray *array= @[@"12-11",@"12-11",@"12-11",@"12-12",@"12-13",@"12-14"];

你可能感兴趣的:(面试题整理)