iOS面试必备考题,请一定要看看

匿名网友 匿名网友 发布于: 2016-04-26 00:00:00
阅读 202 收藏 0 点赞 0 评论 0

常用框架,iOS架构问题

 

AFNetworking http请求

ReactiveCocoa 响应式编程

MagicalRecor 数据持久化

其他开源库的使用:CocoaPods,CocoaLumberjack,Masonry,TMCache,pop,SDWebImage,GPUImage,FLEX

多线程

 

GCD基于硬件的多核编程,抽象度低,接口简单,用于简单的多线程

NSOperation(任务) 与 NSOperationQueue(线程池)。NSOperation 重写main方法,两个衍生: NSInvocationOperation 和 NSBlockOperation。高度抽象,用于复杂的多线程

NSThread。通过初始化方法指定object和selector来执行。

iOS delegate(委托,代理),protocol(协议)区别

 

Delegate ,又称为 委托或代理, 把一个类自己需要做的一部分事情,让另一个类(也可以就是自己本身)来完成,而实际做事的类为delegate

 

如:A对象持有B对象的弱引用,则B对象可以实现A对象的某些行为。A对象负责调用就可以。 类似于UITableView。

 

protocol主要目标是提供接口给遵守协议的类使用。类似于java的接口。

 

delegate通过protocol来实现

 

iOS类别(Category)与类扩展(Extension)

 

Category:不用继承对类添加方法 , 不能添加变量

Extension:没有命名的类别Category。 放在.m文件中@implementation的上方。可添加方法和变量。 私有属性写到类扩展

retain, assign, copy, weak ,strong,__block,__weak等关键字意思

 

assign: 简单赋值,不更改索引计数

copy: 建立一个索引计数为1的对象,然后释放旧对象

retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1

strong:强引用,引用计数+1。一旦最后一个strong型指针离去 ,这个对象将被释放,所有剩余的weak型指针都将被清除。

weak:弱引用,不更改引用计数

__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。

__weak只能在ARC模式下使用,也只能修饰对象(NSString),不能修饰基本数据类型(int)。

__block对象可以在block中被重新赋值,__weak不可以。

__weak 和assign 的区别在于,对象销毁 ,__weak置为nil,而assign为野指针,__weak更安全

iOS layer

 

CALayer(层)是屏幕上的一个矩形区域,在每一个UIView中都包含一个根CALayer,在UIView上的所有视觉效果都是在这个Layer上进行的。

 

他和UIView的区别是,只管绘制渲染。UIView是它的容器,UIView负责监听事件。 形象的比喻view是画板,layer是画布

 

app生命周期

 

willFinishLaunch 将要启动

didFinishLaunch 启动完成

DidBecomeActive 进入活动状态

WillResignActive 将要进入非活动状态,在此期间,应用程序不接收消息或事件,比如来电话了

DidEnterBackground 进入后台

WillEnterForeground 将要回到前台

WillTerminate 退出,销毁

 

启动程序

 

1.  willFinishLaunchingWithOptions

didFinishLaunchingWithOptions

applicationDidBecomeActive

按下home键

 

1.  applicationWillResignActive

applicationDidEnterBackground

双击home键,再打开程序

 

1.  applicationWillEnterForeground

applicationDidBecomeActive

内存问题解决方案

 

analyze 静态编译分析

instruments 动态运行统计

线程间通信与进程间通信(IPC)

 

线程间通信:performSelector

进程间通信: URL Schema就是iOS内的应用调用协议,应用A可以声明自定义的调用协议,就如http/https那样,当另一个应用B打算在应用内打开应用A时,可以打开使用A自定义的协议开头的URL来打开A,除了协议头,URL中还可以附加其他参数

runtime概念

 

object-c的动态性,运行时修改对象的方法和特性。原理是oc的消息机制

 

runloop概念

 

特殊的一个无限循环的线程, 它管理了其需要处理的事件和消息。

 

block,闭包的概念

 

Block是对C语言的扩展,用来实现匿名函数的特性。相当于JavaScript的闭包。是一种代码块,将一段代码看做一个对象

 

闭包就是能够读取其它函数内部变量的函数

 

viewcontroller 生命周期

 

viewDidLoad 视图加载完成

viewWillAppear 视图即将可见

viewDidAppear 视图可见

viewWillDisappear 视图即将消失

viewDidDisappear 视图消失

frame和 bounds 的 区别

 

frame:描述当前视图在其父视图中的位置和大小。

bounds:描述当前视图在其自身坐标系统中的位置和大小。

数据结构

 

array(NSArray ):数组集合

dictionary(NSDictionary):键值对

set( NSSet) :无序列表

衍生的数据结构:可变array( NSMutableArray),可变dictionary( NSMutableDictionary)

iOS内存异常,野指针

 

对已经释放的对象进行操作会出现野指针,导致系统崩溃。xcode无法确定异常的代码位置。需要设置xcode,使得变量推迟释放,当出现野指针,会打印出log提示

 

id和NSObject的区别

 

两个类型都含有Class isa,但NSObject同时包含了一些其它的方法,并需要实现NSObject协议。 所以NSObject可以用id来表示。但id不能用NSObject来表示。

 

id就是一个指针,它可以指向的类型不仅限于NSObject。

 

NSObject*就是 NSObject类型的指针了,它范围较小。

 

id是指针,它要求它指向的类型要实现NSObject protocol。

 

nil、Nil、NULL、NSNull的区别

 

nil:指向一个对象的空指针

Nil:指向一个类的空指针

NULL:指向其他类型(如:基本类型、C类型)的空指针

NSNull:通常表示集合中的空值

NSString什么时候用copy,什么时候用strong

 

对源头是NSMutableString的字符串,retain仅仅是指针引用,增加了引用计数器,这样源头改变的时候,用这种retain方式声明的变量(无论被赋值的变量是可变的还是不可变的),它也会跟着改变;而copy声明的变量,它不会跟着源头改变,它实际上是深拷贝。

 

对源头是NSString的字符串,无论是retain声明的变量还是copy声明的变量,当第二次源头的字符串重新指向其它的地方的时候,它还是指向原来的最初的那个位置,也就是说其实二者都是指针引用,也就是浅拷贝。

 

大部分的时候NSString的属性都是copy

 

响应者链(Responder Chain)

 

UIWindow实例对象会首先在它的内容视图上调用hitTest:withEvent:,此方法会在其视图层级结构中的每个视图上调用pointInside:withEvent:(该方法用来判断点击事件发生的位置是否处于当前视图范围内,以确定用户是不是点击了当前视图),如果pointInside:withEvent:返回YES,则继续逐级调用,直到找到touch操作发生的位置,这个视图也就是要找的hit-test view。

 

hitTest:withEvent:方法的处理流程如下:

 

首先调用当前视图的pointInside:withEvent:方法判断触摸点是否在当前视图内;

若返回NO,则hitTest:withEvent:返回nil;

若返回YES,则向当前视图的所有子视图(subviews)发送hitTest:withEvent:消息,所有子视图的遍历顺序是从最顶层视图一直到到最底层视图,即从subviews数组的末尾向前遍历,直到有子视图返回非空对象或者全部子视图遍历完毕;

若第一次有子视图返回非空对象,则hitTest:withEvent:方法返回此对象,处理结束;

如所有子视图都返回非,则hitTest:withEvent:方法返回自身(self)。

具体教程:http://www.cnblogs.com/snake-hand/p/3178070.html

 

arc原理

 

编译环境 自动在代码中加入了retain/release。

 

NSProxy概念

 

Objective-C不支持多重继承,但是我们可以使用NSProxy的消息转发机制,来转发可由其它类的对象处理的任务,达成同样的目的。它是object-c实现代理模式的途径。AOP面向切面编程的解决方案。

 

aop概念

 

面向切面编程,类似于ssh中的拦截器。降低了代码的耦合。

 

开发工具

 

gitlab git协作开发平台

sourceTree git图形用户界面

teambition 团队协作工具

tcp/ip和socket

 

socket为底层套接字(数据链路层)

ip是一种网络地址(网络层)

tcp是基于ip的可靠地链接(运输层)

udp是基于ip的快速不可靠连接(运输层)

rest api

 

get put post delete。

 

GET用来获取资源

POST用来新建资源(也可以用于更新资源)

PUT用来更新资源

DELETE用来删除资源

开发流程

 

需求分析,架构设计,编码,测试,维护

 

你需要问面试官的问题

 

公司iOS人员架构

公司文化,加班文化

此次面试不足

薪水,其他福利,五险一金怎么缴纳

评论列表
文章目录