美文网首页
面试总结(持续更新中)

面试总结(持续更新中)

作者: Leo_hai | 来源:发表于2016-03-06 21:09 被阅读32次

    3月1日面试(知春路一小公司)由浅入深


    1.应用程序的生命周期。

    有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

    * 显示窗口

    2.@property()各种属性

    3.深拷贝与浅拷贝

    浅拷贝只拷贝指针,不会产生新的对象;深拷贝是内容拷贝,产生了新的对象。

    4.runloop

    NSRunLoop是IOS消息机制的处理模式

    >1.NSRunLoop的主要作用:控制NSRunLoop里面线程的执行和休眠,在有事情做的时候使当前NSRunLoop控制的线程工作,没有事情做让当前NSRunLoop的控制的线程休眠。

    >2.NSRunLoop 就是一直在循环检测,从线程start到线程end,检测inputsource(如点击,双击等操作)异步事件,检测timesource同步事件,检测到输入源会执行处理函数,首先会产生通知,corefunction向线程添加runloop observers来监听事件,意在监听事件发生时来做处理。

    >3.runloopmode是一个集合,包括监听:事件源,定时器,以及需通知的runloop observers

    >1. 只有在为你的程序创建次线程的时候,才需要运行run loop。对于程序的主线程而言,run loop是关键部分。Cocoa提供了运行主线程run loop的代码同时也会自动运行run loop。IOS程序UIApplication中的run方法在程序正常启动的时候就会启动run loop。如果你使用xcode提供的模板创建的程序,那你永远不需要自己去启动run loop

    >2. 在多线程中,你需要判断是否需要run loop。如果需要run loop,那么你要负责配置run loop并启动。你不需要在任何情况下都去启动run loop。比如,你使用线程去处理一个预先定义好的耗时极长的任务时,你就可以毋需启动run loop。Run loop只在你要和线程有交互时才需要

    5.gcd

    6.runtime runtime怎么添加属性方法

    运行时机制,runtime库里面包含了跟类、成员变量、方法相关的API,比如获取类里面的所有成员变量,为类动态添加成员变量,动态改变类的方法实现,为类动态添加新的方法等 需要导入

    1.runtime,运行时机制,它是一套C语言库

    2.实际上我们编写的所有OC代码,最终都是转成了runtime库的东西,比如类转成了runtime库里面的结构体等数据类型,方法转成了runtime库里面的C语言函数,平时调方法都是转成了objc_msgSend函数(所以说OC有个消息发送机制)

    3.因此,可以说runtime是OC的底层实现,是OC的幕后执行者

    4.有了runtime库,能做什么事情呢?runtime库里面包含了跟类、成员变量、方法相关的API,比如获取类里面的所有成员变量,为类动态添加成员变量,动态改变类的方法实现,为类动态添加新的方法等

    5.因此,有了runtime,想怎么改就怎么改

    7.数据本地化的几种方式(NSUserDefaufts,归档反归档,数据库,writeToFile)

    8.堆和栈的区别

    1.堆空间的内存是动态分配的,一般存放对象,并且需要手动释放内存

    2.栈空间的内存由系统自动分配,一般存放局部变量等,不需要手动管理内存

    category和extension区别

    相关文章

      网友评论

          本文标题:面试总结(持续更新中)

          本文链接:https://www.haomeiwen.com/subject/ofuakttx.html