IOS|ios 面试题一

一、 同步是怎么实现的,原理什么?

二、 轮播图怎么实现?
需要看第三方的实现,最好自己实现下,还要考到的点是定时器加入runloop中,让其在tableview上滚动活着停止时,定时器也会执行相应的方法
三、ViewController的生命周期
看下执行的方法。

loadView:从nib载入视图,通常这一步不需要去干涉。除非你没有使用xib文件创建视图
viewDidLoad:载入完成,可以进行自定义数据以及动态创建其他控件
viewWillAppear:视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了
viewDidAppear:视图已在屏幕上渲染完成
viewWillDisappear:视图将被从屏幕上移除之前执行
viewDidAppear:视图将被从屏幕上移除之前执行
viewDidDisappear:视图已经被从屏幕上移除,用户看不到这个视图了
dealloc :视图被销毁
四、 FMDB的使用,有没有遇到什么问题,怎么解决的?有没有进行封装?
FMDatabase操作数据库的话,同时对同一张表进行存取,会出现database is busying。用FMDatabaseQueue不会出现的这样的问题。单列封装FMDatabaseQueue相关操作。
五、 self.view是在什么时候创建的?
ViewController的view是使用了lazyInit方式创建,就是说你调用的view属性的getter:[self view]。在getter里会先判断view是否创建,如果没有创建,那么会调用loadView来创建view。loadView完成时会继续调用viewDidLoad。loadView和viewDidLoad的一个区别就是:loadView时还没有view。而viewDidLoad时view以及创建好了。
六、有几种传值方式? 属性传值、block、notification、delegate、单列传值
七、GCD用了哪些

多线程,什么费时操作、单列等
八、 Runtime的使用?
【IOS|ios 面试题一】1、动态的添加对象的成员变量和方法
2、 动态交换两个方法的实现(黑魔法,主要问这个)
3、实现分类也可以添加属性
4、实现NSCoding的自动归档解档
5、实现字典转模型的自动转换
6、消息转发机制
大家可以具体写下demo。
九、内存管理机制

MRC和ARC方面的
十、头像圆形,一般是怎么设置的?
此题目主要考点是优化,离屏渲染。我觉得应该分情况,若是一个页面只有1、2个,这样可以不用考虑优化,直接设置
XXlayer.cornerRadius=5, layer.masksToBounds = YES ;数量多的话就要优化下了。可以去搜索下相关的优化资料。
十一、Delegate使用weak来修饰?strong和assign的区别?
防止循环引用,引起内存泄漏
strong:该对象强引用delegate,外界不能销毁delegate对象,会导致循环引用(Retain Cycles)
weak:指明该对象并不负责保持delegate这个对象,delegate这个对象的销毁由外部控制

1.weak 此特质表明该属性定义了一种“非拥有关系” (nonowning relationship)。为这种属性设置新值时,设置方法既不保留新值,也不释放旧值。此特质同assign类似,然而在属性所指的对象遭到摧毁时,属性值也会清空(nil out)。而 assign 的“设置方法”只会执行针对“纯量类型” (scalar type,例如 CGFloat 或 NSlnteger 等)的简单赋值操作
2.assigin 可以用非 OC 对象,而 weak 必须用于 OC 对象
3、assign是指针赋值,不对引用计数进行操作,如果使用完毕以后,不把其置为nil,就有可能产生野指针,这时候如果操作不当crash,而weak使用完就没有了,所以weak更安全,其他也没啥区别
十二、NSString一般用什么来修饰? copy。一般我们将对象声明为NSString时,都不希望它改变,所以大多数情况下,我们建议用copy,以免因可变字符串的修改导致的一些非预期问题。
十三、简单说一下APP的启动过程,从main文件开始说起?

程序启动分为两类:1.有storyboard 2.没有storyboard
有storyboard情况下:
1.main函数
2.UIApplicationMain
* 创建UIApplication对象
* 创建UIApplication的delegate对象
3.根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard(有storyboard)
* 创建UIWindow
* 创建和设置UIWindow的rootViewController
* 显示窗口


没有storyboard情况下:
1.main函数
2.UIApplicationMain
* 创建UIApplication对象
* 创建UIApplication的delegate对象
3.delegate对象开始处理(监听)系统事件(没有storyboard)
* 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法
* 在application:didFinishLaunchingWithOptions:中创建UIWindow
* 创建和设置UIWindow的rootViewController
* 显示窗口
十四、view与layer的区别?
1、UIView(父类:UIRespond)可以响应事件,而CALayer(父类:NSObject)不可以
2、一个 Layer 的 frame 是由它的 anchorPoint,position,bounds,和 transform 共同决定的,而一个 View 的 frame 只是简单的返回 Layer的 frame,同样 View 的 center和 bounds 也是返回 Layer 的一些属性
3、UIView主要是对显示内容的管理而 CALayer 主要侧重显示内容的绘制。
UIView负责处理用户交互,负责绘制内容的则是它持有的那个CALayer,我们访问和设置UIView的这些负责显示的属性实际上访问和设置的都是这个CALayer对应的属性,UIView只是将这些操作封装起来了而已。
十五、MJ转model的原理?
Runtime的使用
十六、Cell高度自适应,你是怎么设置的呢?
我们之前都是估算高度。但是他问的可能是ios8以后出现了预估算高度的设置




    推荐阅读