一、main()c++
{ int a[5]={1,2,3,4,5};git
int *ptr=(int*)(&a+1);程序员
printf("%d,%d",*(a+1),*(ptr-1));编程
}json
第一个:2,a指向数组首地址a[1]=2;swift
第二个:a是一个数组名,也就是数组的首地址。设计模式
对a进行取地址运算符,获得的是一个指向数组的指针!!!!这句话尤其重要!也就至关于数组
int (*p) [5] = &a;p是一个指针,它指向的是一个包含5个int元素的数组!!安全
那么执行p+1后,p的偏移量至关于 p + sizeof(int) * 5,而程序中强制将指针p转换成一个int* 那么 p -1 其实就是 p - sizeof(int)因此,p -1 指向了数组中得最后一个元素,也就是 5服务器
二、oc没有多重继承,是用协议(protocol)来代替
三、oc类里面的方法只有两种,静态方法和实例方法,全部实例变量都是默认私有的,全部实例方法默认都是共有的。
四、const意味着“只读”,const int a;int const a;声明只读的整型变量a,
const int *a;a是一个指向长整型数的指针,整型数不可修改,但指针能够修改
int* const a;a是一个指向整型数的长指针,整型数可修改,但指针不可修改
int const* a const;a是一个指向长整型数的长指针,都不可修改
阻止变量被修改,使用const关键字
对指针来讲,能够指定指针自己为const,也可指定指针所指的数据为const,或两者同时为const
在一个函数声明中,const能够修饰形参,代表它是一个输入参数,在函数内部不能改变其值
对于类的成员函数,若指定其为const类型,则代表其是一个常函数,不能修改类的成员变量
五、static的做用
函数体内static变量的 做用范围是该函数体,不一样于auto变量,该变量的内存只被分配一次,所以其值在下次调用时仍维持上次的值。
在模块内的static全局变量能够被模块内全部函数访问,但不能被模块外的其余函数访问。
在模块内的static函数只可被这一模块的其余函数调用,这个函数的使用范围被限制在声明它的模块内。
在类中的static成员变量属于整个类所拥有,对类的全部对象只有一份拷贝
在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,所以只能访问类的static成员变量
六、extern"C"的做用
被它限定的函数或变量是extern类型的
被它修饰的变量和函数是按照c语言方式编译和链接的
七、#import,#include的区别,@class呢?
@class通常用于头文件中须要声明该类的某个实例变量的时候用到,在m文件中仍是须要使用#import,#import比#include的好处是不会引发交叉编译
八、oc的优势 cateogies, Posing, 动态识别,指标计算,弹性讯息快递、不是过分复杂的c衍生语言,可与c++混合编程
九、命名空间:不支援命名空间,不支持运算符重载,不支持多重继承,使用动态运行时的类型,都是函数调用,不少编译时的优化方法用不到
十、内存管理
十一、自动释放池
十二、堆和栈
对于栈来说,是由编译器自动管理,对于堆来讲,释放工做由程序员控制,容易产生内存泄漏
栈在widows系统下,是向低地址扩展的数据结构,是一块连续的内存区域,能从栈得到的空间较小
堆:堆事向高地址扩展的数据结构,是不连续的内存区域,得到空间比较灵活,也比较大。
区别:碎片问题:对于堆来说,频繁的new/delete会形成内存空间的不连续,从而形成大量碎片,使程序效率下降。对于栈来说,由于栈是先进后出的队列,以致于永远不可能有一个内存块从栈中间弹出
分配方式:堆是动态分配的,栈有两种分配方式:静态分配和动态分配
分配效率:栈是机器系统提供的数据结构,计算机底层对栈提供支持,堆是c/c++函数库提供的,它的机制是很复杂的
十二、swift新特性
支持全部c和oc的基本类型
提供了两种功能强劲的集合类型-Array和Dictionary
支持一种新的高级类型-元组
可选类型
支持闭包的特性
支持脚本语言的特性,能高效地编译运行
中级:
一、mvc
二、线程和进程
二者关系:
一个线程只属于一个进程,而一个进程能够有多个线程,但至少有一个线程
资源分配给进程,同一进程的全部线程共享该进程的全部资源
线程在执行过程当中,须要协做同步。不一样进程的线程之间利用消息通讯的办法实现同步
真正在处理机上运行的是线程
线程是指进程内的一个可执行单元,也是进程内的可调度实体
二者区别:
调度:线程做为调度和分配的基本单元,进程做为拥有资源的基本单位
并发性:不只进程之间能够并发执行,同一个进程的多个线程之间也能够并发执行
拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但能够访问隶属进程的资源
系统开销:建立、撤销进程的开销比较大
三、进程的同步机制
原子操做、信号量机制、自旋锁、分布式系统等
四、进程死锁的缘由
资源竞争以及进程推动顺序非法
五、死锁的4个必要条件
互斥、请求保持、不可剥夺、环路
六、死锁处理
鸵鸟策略、预防策略、检测与解除死锁
七、KVC和KVO
KVC:键值编码,是一种间接访问对象实例变量的机制,该机制能够不经过存取方法就能够访问对象的实例变量
KVO: 键值监听,是一种使得对象获取其余对象属性变化的机制
实现KVO模式,被观察的对象必须使用KVC键值编码来修改它的实例变量,这样才能被监听
八、深复制、浅复制
深复制:不只复制对象自己,对象持有的属性对象也作复制
浅复制:只复制对象自己,不对里面的属性复制
九、assign、retain、copy、nonatomic
assign:普通赋值,通常用于基本数据类型,常见委托设计模式,以防止循环引用
retain:保留计数,得到对象的全部权,引用计数在原有基础上加1
copy:通常字符串使用copy。Foundation中的不可变对象使用copy效果至关于retain,只是引用计数+1
nonatomic:非原子性访问,不加同步,多线程并发访问会提升性能
十、ARC状况下,strong与weak,_unsafe _unretained与weak的区别
strong:强引用,weak:弱引用,在ARC中,使用strong告诉编译器自动插入retain,weak至关于手动管理内存的assign
_unsafe _unretained与weak功能一致,区别在于当指向的对象销毁后,weak会将变量置为nil,防止调用野指针
十一、ARC存在内存泄漏吗?
循环引用致使内存泄漏,oc对象与CoreFoundation类之间桥接时,管理不当也会产生内存泄漏
十二、事件响应者链
响应者链表示一系列的响应者对象。事件被交由第一响应者对象处理,若是第一响应者不处理,事件被沿着响应者链向上传递,交给下一个响应者(next responder)
view->viewcontroller->window->application->丢弃事件
1三、svn、git使用
1四、打包静态库
1五、App发布上架流程
1六、storyboard的使用
高级:
一、CALayer与UIView的区别?
二者的最大区别就是,图层(CALayer)不会直接渲染到屏幕上。uiview是iOS系统中界面元素的基础,全部的界面元素都继承自它。它自己是由CoreAnimation来实现的。真正的绘图部分由一个CALayer类来管理。一个uiview上能够有n个CALayer,每一个layer显示一种东西,加强uiview的展示能力
二、GCD
GCD是apple开发的一个多核编程的较新的解决办法
是一个替代诸如NSThread等技术的很高效和强大的技术,彻底能够处理如数据锁定、资源泄漏等复杂的一步编程问题
扩展知识:(操做队列、异步,同步)
三、TCP和UDP
TCP:传输控制协议,提供面向链接的、可靠的、点对点的通讯
UDP:用户数据报协议,提供非链接的,不可靠的点到多点的通讯
四、socket链接和http链接
http:短链接,客户端项服务端发送一次请求,服务端响应链接即会断掉
socket:长链接,一旦创建不会主动断掉
五、TCP的三次握手
第一次:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等服务器确认
第二次:服务器端收到syn包,必须确认客户的SYN(ack=j+1),同时本身也发送一个SYN(syn=k)即SYN+ACK包,此时服务器进入SYN_RECV状态
第三次:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务端进入ESTABLISHED,完成三次握手
六、iOS对象通讯方式
代理、block、通知、KVO
七、http,https
短链接,都是客户端主动发送请求,服务器做出响应,而后断开。GET没有请求体,POST有请求体
https:安全超文本传输协议。使用安全套接字层(SSL)进行信息交换
八、xml与json数据解析
XML解析方式:DOM解析和SAX解析
DOM解析必须先完成DOM树的构造,在处理规模较大的XML文档时很耗内存,占用资源比较多
SAX是用事件驱动模型,解析XML文档时每遇到一个开始或者结束标签、属性或者一条指令,程序就产生一个事件来进行相应的处理。SAX更适合较大的文档
json解析比较好用的是第三方的JSONKIT和iOS自带的json解析类
九、taleview的复用,设计模式
十、core Data
十一、断点续传
十二、Core开头的系列内容,CoreAnimation和CoreGraphics,分别使用CA和CG作过什么动画或者图像上的内容