经典面试总结1

1.UItableview优化机制:

UItableview一般只会加载显示出来的cell,如果滚动时(上下拉刷新时)将会出现新的cell,首先从缓存池中去取,如果缓存池中没有cell就去重新创建。

2.程序的启动流程:

1、main.m是程序的入口

2、UIApplicationMain()创建应用程序对象,并且为此对象指定委托,检测程序的执行,同时开启事件循环,处理程序接收到的事 件

3、UIApplicationDelegate方法的执行 4、加载window
5、指定根视图控制器 6、在指定的试图控制器中添加控件,实现应用程序界面

1.首先创建uiapplication对象2.创建delegate对象,并且成为uiapplication对象的代理属性3.开启主运行循环:目的是让程序一直运行起来4.加载info.plist文件,判断info.plist文件有没有指定main.stortboard文件,如果指定的话就加载main.stortboard。

3.传值问题:

代理:什么时候使用代理?代理可以用来传值        封装一个控件时经常使用代理,主要是为了程序的扩展性,方便以后维护和升级。另外苹果官方的控件多是使用代理(UItableview,scrollow等)

使用代理时,需要明确对象才可以传值

通知:一般也可以用来传值,更多的时候是通知其他的对象做事情,使用通知不需要管消息的接收者和发送者,通知使用完毕后,记得要移除通知。

是么时候使用通知:一般情况下是两个没有关系的对象,进行交流,这个时候会使用通知(监听网络状态或键盘时可以使用)。

KVC:一般情况下转模型的时候会用到,当碰到一些readonly属性时,可以使用kvc简化步骤。

kvo: 一个对象监听另一个对象属性的值,并且能够发现值的变化,适合任何类型的对象监听另一个对象的改变。只能对属性的变化做出响应,不能对方法和动作做出反应。

block:     是么时候调用:一般也是用来传值,AFN就是使用Block封装的代码,一般的网络请求是异步请求,并不会马上返回数据,表示一个方法不能直接返回数据,而是通过Block回掉,block用来保存一段代码,先把这段代码放到block中,请求成功后直接调用block,完成传值。

使用注意点:1.block保存到模型中,MRC下使用copy修饰(只有通过copy修饰,才能把block放到堆内存中),ARC下可以使用strong和copy修饰,都是为了把block放到堆内存中管理。

4.Controller的几个方法的区别;

loadview:加载view到内存   viewdidload:进一步初始化这些view  内存不足时调用viewdidunload

5. 

 获取项目根路径,并在其下创建一个名称为userData的目录? // 获取根路径

NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:];
// 创建文件系统管理器
NSFileManager *fileManager = [[NSFileManager alloc] init];

// 判断userData目录是否存在
if(![fileManager fileExistsAtPath:[NSString stringWithFormat:@"%@/userData", documentsDirectory]]) { // 不存在,创建一个userData目录
[fileManager createDirectoryAtPath:[NSString stringWithFormat:@"%@/userData", documentsDirectory]withIntermediateDirectories:false attributes:nil error:nil];
原文地址:https://www.cnblogs.com/liuyang666/p/5235887.html