内存管理
1:对一个对象使用alloc,new,copy,retain,当你不再需要使用该对象时候,你必须要向该对象发送一条releas或者autorelase消息,释放对象所占用内存空间
2:当向一个对象发送autoreleas时候,对象并没有被释放,而是暂时放到一个自动释放池中,是一个队列形式存放,后进先出,当应用程序结束或者时间循环结束,程序操作系统会向池中每个对象发送一条release消息清理,将自动释放池清空,回收内存。
3:当向一个对象使用release消息时候,对象也不一定被释放了,而是要看对象的引用计数retainCount是否为0,只有当retainCount为0时候对象才被释放了。
c/c++编译后的程序所占用内存分配
1:栈(stack)上的对象由编译器自动分配释放,存放函数的参数值,局部变量,一般不需要程序员手动回收,类似于数据结构中的栈
2:堆(heap)上的对象由程序猿手动管理,与数据结构中的堆是不同的,存放对象,类似于链表结构。
3:全局区(静态区) static
4:文字常量区
5:代码区
代理
代理设计模式,指的是委托他人去完成自己要求的一些事情,需要设置一个委托对象,常用于应用程序间通信,传值。比如一个view需要跳转,但又不是视图控制器,没有加入到导航控制器,那么我们可以使用代理委托一个有导航能力的控制器去完成,进行通信。
通知
当一个对象发出一个消息后,需要收听的只要注册一下监听就可以获取,是一对多的模式。在监听完成之后,需要在dealloc将广播移除。可以使用广播进行通信传递参数。
1:本地通知
2:远程通知
类目
1:可以不通过继承添加方法,并且不需要访问实现文件,所添加的方法与原有方法具有同等地位,子类如果继承该类,那么也会继承该方法。
2:可以避免过多继承导致类目过于臃肿。
3:如果在类目中覆盖了已有的方法,那么不能调用原先旧的方法了。
4:在类目中添加的方法是会影响整个应用程序中使用的的该类。
延展
相当于私有方法,将.h文件里需要声明为私有的变量和方法放到.m文件中。
单例
单例就是通过一些方法限制保证这个类的实例在整个应用程序中只有一个,并且在整个应用程序中都可以提供使用,通常用来进行数据保存和传递。在ios4.0后,使用GCD创建单例dispatch_once ,保证只运行一次,并且是线程安全的,不像之前需要使用@synchnorized来保证线程安全
KVC:键值编码
数据存储
1:写文件
2:NSCoding协议,归档加密数据
3:NSUserDefault,轻量级数据存储,存放形式是plist文件,键值对对应,存放在沙盒中的prefrence里,数据持久化,当下次用户进入时候,数据还是存在的。
4:CoreData,基于sqlit进行的一层封装,coreData将数据存储成成xml,二进制,或者是sqlit形式
5:SQLite
数据解析
1:json解析
2:xml 解析
8:线程,进程
MVC:
M:数据模型,V视图 C 控制器
UIApplication应用程序生命周期
在整个应用程序中,会自始自终有一个类UIAplication类,在程序主函数入口,有一个UIAplicationDelegate代理,将整个应用程序作为它的代理对象,对整个应用程序监听。
1:程序启动,但还没有进入状态保存
2:程序完成启动,准备开始运行
3:程序将要进入非活跃状态,此时拒绝外部事件,比如打来电话
4:程序将要进入后台
5:程序将要从后台回到前台
6:程序已经从后台回到前台
7:程序将要退出
应用程序启动进程
UIViewController生命周期
alloc(分配内存)-->init(初始化数据)--->loadView(加载视图主View)---->ViewDidLoad(视图加载完成,将视图载入内存中,只调用1次,主要初始化一些数据设定)---->ViewWillAppear(视图将要出现时候)---->viewDidAppear(视图已经出现)----->viewWilDisAppear(视图将要移除)---->viewDidDisAppear(视图已经移除)----->viewDidUnload(释放一些强引用对象,将对象设置为nil)-----DIdReciveMemeroyWarning(接收到内存警告,释放不需要在内存中存在的对象的所有权)---->dealloc(视图将要被销毁,释放一些在init和viewDidLoad里设置的对象)
self ,super作用
self
super
APNS消息推送
首先将push证书激活为active,导出证书,app向iOS系统注册远程推送通知,ios系统想苹果服务器发起请求,苹果服务器接受请求将一个token令牌给app,app向服务器发起请求,服务器拿到token令牌对比,将推送证书和内容推送给苹果服务器,苹果服务器再推送给app