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的使用?

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对象

* 创建UIApplicationdelegate对象

3.根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard(storyboard)

* 创建UIWindow

* 创建和设置UIWindowrootViewController

* 显示窗口


没有storyboard情况下:

1.main函数

2.UIApplicationMain

* 创建UIApplication对象

* 创建UIApplicationdelegate对象

3.delegate对象开始处理(监听)系统事件(没有storyboard)

* 程序启动完毕的时候就会调用代理的application:didFinishLaunchingWithOptions:方法

* application:didFinishLaunchingWithOptions:中创建UIWindow

* 创建和设置UIWindowrootViewController

* 显示窗口

十四、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以后出现了预估算高度的设置




你可能感兴趣的:(IOS,iOS,面试题)