ios知识点小结

14 篇文章 0 订阅

内存管理 

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 KVO

KVC:键值编码  可以间接地访问实例变量 


数据存储

1:写文件  

2:NSCoding协议,归档加密数据

3:NSUserDefault,轻量级数据存储,存放形式是plist文件,键值对对应,存放在沙盒中的prefrence里,数据持久化,当下次用户进入时候,数据还是存在的。

4:CoreData,基于sqlit进行的一层封装,coreData将数据存储成成xml,二进制,或者是sqlit形式

5:SQLite  可以自建一个sqlite数据库,里面见若干表,可以相关连起来,但是每次查询会产生输入输出消耗。因为每一个句柄在内存中都有一段缓存,如果查找数据过大,那么会造成数据浪费。但如果具有查询条件的一些数据,还是可以考虑放到数据库中。


数据解析

1:json解析   json是一种轻量级数据结构,通常使拥有SBJson,JSonKit,TouchJson,ios5.0之后提供了一个解析json的API

2:xml 解析    xml全称是可扩展性标记语言,通常web通信使用比较多,在ios中常用的解析方式有两种,文档解析(Dom)和事件解析(sax),使用的解析框架有NSXmlParser

8:线程,进程

MVC:

M:数据模型,V视图 C 控制器  之所以分成这三块,可以通过控制器作为中间角色协调视图和数据管理,就像一个项目中的项目经历需要协调各个部门合作,视图和数据可以完全隔离,不需要有任何联系,这样可以大大增强应用程序的灵活性,将model封转好了可以拿到别的地方也可以使用,可以更好地降低耦合性,提高代码复用率。当model的数据更新了,可以使用通知和KVO广播通知所有人,哪个接收了就可以知道model改变了。


UIApplication应用程序生命周期

在整个应用程序中,会自始自终有一个类UIAplication类,在程序主函数入口,有一个UIAplicationDelegate代理,将整个应用程序作为它的代理对象,对整个应用程序监听。

1:程序启动,但还没有进入状态保存

2:程序完成启动,准备开始运行

3:程序将要进入非活跃状态,此时拒绝外部事件,比如打来电话

4:程序将要进入后台

5:程序将要从后台回到前台

6:程序已经从后台回到前台

7:程序将要退出

应用程序启动进程    Main函数主代理--->Appdelegate--->主程序代理方法----->初始化UI---->app运行--->事件循环


UIViewController生命周期

alloc(分配内存)-->init(初始化数据)--->loadView(加载视图主View)---->ViewDidLoad(视图加载完成,将视图载入内存中,只调用1次,主要初始化一些数据设定)---->ViewWillAppear(视图将要出现时候)---->viewDidAppear(视图已经出现)----->viewWilDisAppear(视图将要移除)---->viewDidDisAppear(视图已经移除)----->viewDidUnload(释放一些强引用对象,将对象设置为nil)-----DIdReciveMemeroyWarning(接收到内存警告,释放不需要在内存中存在的对象的所有权)---->dealloc(视图将要被销毁,释放一些在init和viewDidLoad里设置的对象)


self ,super作用

self  当前对象本身,类似于c++里的this指针,指向当前的对象

super   向父类发送消息指令



APNS消息推送

首先将push证书激活为active,导出证书,app向iOS系统注册远程推送通知,ios系统想苹果服务器发起请求,苹果服务器接受请求将一个token令牌给app,app向服务器发起请求,服务器拿到token令牌对比,将推送证书和内容推送给苹果服务器,苹果服务器再推送给app


block:

1:类似于函数指针,可以作为函数参数或返回值,本身也可以带参数或返回值

2:某种程度上可以代替delegate,只能访问局部变量,不能修改,如果需要修改,那么需要在前面添加__bkock修饰


NSThread

1:使用实例方法创建的,在创建线程的时候开始同步运行线程,而使用类方法创建的是先创建线程在运行线程,运行线程时候可以设置线程优先级。

2:线程执行方法selector只能带一个参数,并且没有返回值

3:线程执行完之后跳回到主线程更显主线程的UI界面

4:需要使用线程锁,如果没有使用线程锁可能导致一些问题出现


GCD: 

1:适用于多核多线程,如果是单核也就没有多大意义了,所以在10.6以后,ios4.0之后被引入

2:用于代替NSThread,NSOperationQueue,NSInvocationOperation

3:相比于单独开辟线程,GCD明显的可以将散落在方法结合在一起,大大增强了代码的可读性和维护性,减少中间参数的传递  可以并行执行多个线程,等多个线程结束后,再汇总。

4:GCD可以让程序在后台运行更长时间,一般进入后台程序运行时间最多只有5分钟,而使用GCD最多可以达到10分钟,可以在这期间做一些清理缓存,发送数据等工作。


线程(Thread)和进程(Process):

1:计算机CPU就像一座工厂,单个CPU只能运行一个任务,里面有许许多多的厂房,厂房里有许许多多的工人,厂房就像是进程,工人就像是线程,一个进程可以包括多个线程,车间的空间是共享的,进程的空间是共享的,每个线程都可以共用这些内存。


TCP/IP ,http和scoket

1:TCP/IP 手机能够链接网络是因为手机底层实现了TCP/IP协议,发起一次TCP链接需要经过三次握手。

2:http(超文本传输协议)一般由客户端主动发起请求,服务器端响应请求,是单向的,服务端不能主动像客户端发起请求,会在http头部带上一个请求头和带上请求体,包含一些请求数据,一次请求结束后会终端通信,通信及时性不强,是一种短链接。

3:scoket(套接字),通常scoket链接就是TCP链接,是使用套接字进行通信的,可以算是长连接,服务器端和客户端都可以发起请求,并且一次请求后不会立刻中断,通过套接字接口实现和多个不同应用程序进行通信。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值