[置顶]iOS面试用到的一些知识点和技术
2016-09-24 09:24
453 查看
1、APP的生命周期和viewcontroler的生命周期?
答:APP的生命周期:在APP的代理中分为七个阶段:
1.将要启动
2.已经启动
3.将要进入非活动状态
4.进入后台
5.从后台进入前台
6.进入活动状态
7.内存告警
viewcontroller的生命周期:(也是七个)
loadView->viewDidLoad->viewWillAppear->viewDidAppear->viewWillDisAppear->viewDidDisAppear->delloc
2、多线程:NSThread、NSOperation、GCD
NSOperation 是个抽象类,并不具备封装操作的能力,必须使⽤它的子类:
NSInvocationOperation (使用代理)
NSBlockOperation (使用block)
GCD---
GCD可用于多核的并行运算
GCD会自动利用更多的CPU内核(比如双核、四核)
GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程
程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码
学习GCD之前,先来了解GCD中两个核心概念:任务和队列
任务:就是执行操作的意思,换句话说就是你在线程中执行的那段代码。在GCD中是放在block中的。执行任务有两种方式:同步执行和异步执行。两者的主要区别是:是否具备开启新线程的能力。
同步执行(sync):只能在当前线程中执行任务,不具备开启新线程的能力
异步执行(async):可以在新的线程中执行任务,具备开启新线程的能力
队列:这里的队列指任务队列,即用来存放任务的队列。队列是一种特殊的线性表,采用FIFO(先进先出)的原则,即新任务总是被插入到队列的末尾,而读取任务的时候总是从队列的头部开始读取。每读取一个任务,则从队列中释放一个任务。在GCD中有两种队列:串行队列和并发队列。
想要更详细的了解GCD去看:http://www.jianshu.com/p/2d57c72016c6
3、单例、代理、属性、通知、block的传值技术?
属性传值很好理解。A->B 就在B的.h中暴露出一个属性就可以了,在A中直接调用B的实例进行赋值就可以了。 也是最简单的传值方法
代理传值 A->B 在A中声明协议 在B中遵循协议 并实现协议方法就可以了 也比较简单
B->A 即反向传值 在B中声明协议 A中遵循协议----- 在A中push到B时遵循协议,设置代理 并实现代理方法 在B中pop回A时利用自己的代理执行代理方法(即把B中的值赋给代理方法中的参数即可) 是不是很简单
只要记住 代理反向传值 谁传谁声明协议 接收方实现代理方法 push前遵循协议设置代理 pop前执行代理方法(赋值)
block 传值分为正向传值和反向传值
正向传值 A->B 在A中声明一个block Apush前进行block的实现block B中要赋值的时候进行调用block 这种block应为带参数和返回值的block
反向传值 B->A 在B中声明一个block Apush前实现block Bpop前调用block 这种block应为带参数的block
单例传值也分为正向传值 和反向传值
正向传值就不说了 说白了就是一个中间者 A->B A->C C->A
反向传值的话就是 B->A Bpop时把值赋值给单例 在界面消失时实例化A的对象 把单例的值赋给A (感觉多此一举 还不如直接属性赋值 但单例在数据共享时还是有用处的)
4、MVC、MVVM、MVP三大设计框架
MVC
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919201806512-769430946.png)
缺陷:
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919202442324-925642014.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919202551402-181084327.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919202607871-1415857674.png)
实在是写的太好了 就直接拿过来了
MVVM:
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919204836277-1893808480.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919204839199-1909324966.png)
MVP:
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919205444793-235230427.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919205448871-71005794.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919205459996-219252446.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919205501606-996426151.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919205506496-888238195.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919205507934-1430302006.png)
5、单例(singleton)代理(delegate)观察者(observer)动作/目标机制(target/action)等常见设计模式
单例:
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919210153824-1456940591.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919210159668-1946965853.png)
代理:
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919210814074-517384686.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919210822481-1862356962.png)
观察者:
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919211458887-681505476.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919211504371-230303708.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919211512090-1844631973.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919211514731-10924045.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919211518199-45705101.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919211521856-1548767416.png)
动作/目标机制:
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919211950074-1180240992.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919211952715-1771901798.png)
总结的好,希望能收获一个赞 给点鼓励
这是第一章总结的面试题就有一大堆东西了
接下来还有第二章 或者我的简书地址去看看:http://www.jianshu.com/users/795c2ec428fd/latest_articles 也收藏了些干货。
谢谢大家的支持
答:APP的生命周期:在APP的代理中分为七个阶段:
1.将要启动
2.已经启动
3.将要进入非活动状态
4.进入后台
5.从后台进入前台
6.进入活动状态
7.内存告警
viewcontroller的生命周期:(也是七个)
loadView->viewDidLoad->viewWillAppear->viewDidAppear->viewWillDisAppear->viewDidDisAppear->delloc
2、多线程:NSThread、NSOperation、GCD
NSOperation 是个抽象类,并不具备封装操作的能力,必须使⽤它的子类:
NSInvocationOperation (使用代理)
NSBlockOperation (使用block)
GCD---
Grand Central Dispatch(GCD) 是Apple开发的一个多核编程的较新的解决方法
GCD可用于多核的并行运算
GCD会自动利用更多的CPU内核(比如双核、四核)
GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程
程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码
学习GCD之前,先来了解GCD中两个核心概念:任务和队列
任务:就是执行操作的意思,换句话说就是你在线程中执行的那段代码。在GCD中是放在block中的。执行任务有两种方式:同步执行和异步执行。两者的主要区别是:是否具备开启新线程的能力。
同步执行(sync):只能在当前线程中执行任务,不具备开启新线程的能力
异步执行(async):可以在新的线程中执行任务,具备开启新线程的能力
队列:这里的队列指任务队列,即用来存放任务的队列。队列是一种特殊的线性表,采用FIFO(先进先出)的原则,即新任务总是被插入到队列的末尾,而读取任务的时候总是从队列的头部开始读取。每读取一个任务,则从队列中释放一个任务。在GCD中有两种队列:串行队列和并发队列。
想要更详细的了解GCD去看:http://www.jianshu.com/p/2d57c72016c6
3、单例、代理、属性、通知、block的传值技术?
属性传值很好理解。A->B 就在B的.h中暴露出一个属性就可以了,在A中直接调用B的实例进行赋值就可以了。 也是最简单的传值方法
代理传值 A->B 在A中声明协议 在B中遵循协议 并实现协议方法就可以了 也比较简单
B->A 即反向传值 在B中声明协议 A中遵循协议----- 在A中push到B时遵循协议,设置代理 并实现代理方法 在B中pop回A时利用自己的代理执行代理方法(即把B中的值赋给代理方法中的参数即可) 是不是很简单
只要记住 代理反向传值 谁传谁声明协议 接收方实现代理方法 push前遵循协议设置代理 pop前执行代理方法(赋值)
block 传值分为正向传值和反向传值
正向传值 A->B 在A中声明一个block Apush前进行block的实现block B中要赋值的时候进行调用block 这种block应为带参数和返回值的block
反向传值 B->A 在B中声明一个block Apush前实现block Bpop前调用block 这种block应为带参数的block
单例传值也分为正向传值 和反向传值
正向传值就不说了 说白了就是一个中间者 A->B A->C C->A
反向传值的话就是 B->A Bpop时把值赋值给单例 在界面消失时实例化A的对象 把单例的值赋给A (感觉多此一举 还不如直接属性赋值 但单例在数据共享时还是有用处的)
4、MVC、MVVM、MVP三大设计框架
MVC
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919201806512-769430946.png)
缺陷:
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919202442324-925642014.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919202551402-181084327.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919202607871-1415857674.png)
实在是写的太好了 就直接拿过来了
MVVM:
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919204836277-1893808480.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919204839199-1909324966.png)
MVP:
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919205444793-235230427.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919205448871-71005794.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919205459996-219252446.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919205501606-996426151.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919205506496-888238195.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919205507934-1430302006.png)
5、单例(singleton)代理(delegate)观察者(observer)动作/目标机制(target/action)等常见设计模式
单例:
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919210153824-1456940591.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919210159668-1946965853.png)
代理:
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919210814074-517384686.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919210822481-1862356962.png)
观察者:
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919211458887-681505476.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919211504371-230303708.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919211512090-1844631973.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919211514731-10924045.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919211518199-45705101.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919211521856-1548767416.png)
动作/目标机制:
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919211950074-1180240992.png)
![](http://images2015.cnblogs.com/blog/965839/201609/965839-20160919211952715-1771901798.png)
总结的好,希望能收获一个赞 给点鼓励
这是第一章总结的面试题就有一大堆东西了
接下来还有第二章 或者我的简书地址去看看:http://www.jianshu.com/users/795c2ec428fd/latest_articles 也收藏了些干货。
谢谢大家的支持
相关文章推荐
- 这段时间的面试
- 从一个长度为n的数组中找出前k个最小值的最优实现
- html面试题
- 前和讯新浪微博高级工程师姚飞:合作,共赢。
- iOS面试题
- 菜鸟程序员的成长之路(五)——说说2015年,畅谈一下2016年
- 菜鸟程序员的成长之路(五)——说说2015年,畅谈一下2016年
- Activity生命周期小知识
- [置顶] 直面坑爹的前端面试
- 魅族面试的一个问题,img是行内元素,为什么也可以设置框高?
- Java研发岗位面试归类B(附答案)
- 剑指Offer面试题36:数组中的逆序对
- 程序员的成长日记-开篇
- 程序员的样子
- 面试中的排序算法总结(转)
- 程序员面试宝典:螺旋队列第1题
- 面试
- Java面试基础部分(1)
- Web前端面试指导(十三):css样式的优先级是怎么样的?
- 微信小程序将带来web程序员的春天!