小知识点--小结

一 OC 小结html

 

1 什么是 OC 语言?ios

    OC 语言即面向对象语言,它扩展了 ANSI C 语言,将 SmallTalk 式的消息传递机制加入到 ANSI C 中.它是苹果 OS 和 iOS 以及相关的 API,Cocoa 和 Cocoa Touch 的主要编程语言.git

2 OC 语言的特色:程序员

  • 支持 C 语言语法,是 ANSI-C 语言的一个超集,是一种高效的编程语言.
  • 是 C 语言面向对象的扩展,彻底支持面向对象的特性.
  • 简洁易读的编程风格,使编程和阅读更加清晰.
  • 兼容性好,能够在项目中直接导入 C 和 C++ 的头文件,也能够在文件中直接使用OC 和 C++ 编程.

3 iOS 的生态系统不只仅指其软件方面的丰富,更多指的是其设备的多样性.数据库

4 Core OS编程

是用 FreeBSD 和Mach所改写的Darwin,是开源的符合 POSIX 标准的一个 UNIX 核心.该层包含全部 iOS 的基础功能(全部的这些功能都是经过 C 语言的 API 来提供的).另外该层具备 UNIX 特色,所以当将 UNIX 上的功能移植到 iOS 上的时候用到Core OS 的 API.同时该层还提供了硬件和系统框架之间的接口,但出于安全考虑,只有有限的框架能使用.swift

5 Core Services设计模式

       它在 Core OS 的基础上提供了更为丰富的功能,其中包括 Foundation.Framework 和 Core Foundation.Framework.之因此叫 Foundation 是由于,它提供了处理字串,排列,时间等基础功能.).其中 Foundation 属于 OC 是 API, 而 Core Foundation 属于 C 的 API.另外 Core Sercies 还提供了Security(处理认证,密码管理,安全性管理),Core Location(定位)SQLite(轻量级的数据库),Address Book(处理电话本)等功能.数组

6 Media缓存

       即提供图像,音乐,影片等多媒体功能.其中图片包括2D(Quartz 2D) 和3D(Open GLES).音乐对应的模块是Core Audio 和Open AL. 影片用 Media Player来支持.最后还提供了Core Animation动画支持.

7 Cocoa Touch

       它是 OC的 API其中最核心的部分的 UIKit.Framework,应用程序上的各类组件所有由它来提供实现.除此以外还负责多点触摸.文字的输出,图片网页的显示,相机/文件的存取以及加速感应的部分.

8 swift

       它继承了 OC 的面向对象优势,同时又具备简便的语法结构.它具备如下特色.

  • 闭包的统一
  • 元组和多个返回值
  • 泛型
  • 快速而简洁的迭代范围/集合
  • 支持的方法和扩展的协议
  • 函数式的编程模式
  • 不经过编译便可查看效果
  • 高效强大
  • 安全

9 OC 和 Swift 之间的区别

  • Swift句末不须要加分号,除非一行中写几行代码
  • Swift没有 main 函数,函数的执行是从上往下执行.
  • Swift没有. h 和. m 文件只有. Swift文件.
  • Swift没有地址的概念
  • Swift的数据类型会自动判断(变量用 var, 常量用let)
  • 强制类型转换: OC的强转à(int)a, Swift的强转àint(a)
  • 整数的数据类型能够经过 .min 和 .max来获取最大和最小值
  • 定义类型:OC:Typedef int Myint  Swift:Typealiaes Myint = int
  • Swift的摸除取余运算支持小数
  • Swift中 BOOL 类型中不在是 OC 中的非0即真,而是 true 为真 false 为假
  • Swift的赋值运算没有返回值
  • Swift能够多对多赋值: let(x,y) = (1,2)
  • Swift的循环语句必须加{},就算只有一行代码,也要加
  • Swift的 switch 语句后面能够跟任何数据类型,而且里面不用 break

注:若是不想要break的效果 即后面的都想执行 那就写上关键字  fallThrough,但在fallThrough后面就不能再定义常量变量了

10 swift 独有的特色

  • 运算: a…b 表示[a,b]  a..<b 表示(a,b)
  • 独有的溢出运算符:即当你赋值的时候大于其最大值范围,则会报错
  • Swift独有元祖类型

Var a = (x:15,y:20.0)

其中 a 就是元祖名,里面有两个元素 x和 y.

取出赋值:a.x = 10或者 a.0 = 10(默认有下标)

修改类型: var a = (int,string) = (10,21.0)

打印时: printIn(a) = (10,20.0)

用下划线省略不须要的元素 var a = (_,20.0)

  • Switch 语句中与元祖类型的时候,还能够用相似 SQL 语句的语法,添加过滤条件.
  • 函数的外部参数名

原来是形式: func Sum(num1:int,num2:int) àint{}  调用: Sum(10,20)

如今:func Sum(numOne num1:int,numTwo num2:int) àint{}

调用: Sum(numOne:10,numTwo:20)

  • 函数的默认参数值

func addPerson(name:string,age:Int = 18) à string{}

调用: addPerson(“tom”)

注:修改年龄时 addPerson(“Tom”,age:19)

二 ARC 和 MRC 内存管理

       从 MRC—>ARC 就是将内存管理部分,从开发者的函数中转移到函数外部的runtime 中.因为 runtime 的开发简单,逻辑层次高,因此 runtime 的出错概率很小,另外因为编译器的优化,使得运行速度很高.

       ARC 的特色:

  • 不能显示的调用 dealloc,retain,release 等(一样不能再 ARC 中自定义的 delloc 方法中调用[super dealloc]方法.不能调用@selector(retain), @selector(release)的方法)
  • 不能使用 NSAllocateObject 和 NSDeallocateObject来建立和释放对象.
  • 不能使用 C 语言结构体中使用对象指针
  • id 和 void * 之间不能随意转换
  • 不能使用NSAutoreleasePool对象
  • 不能使用内存区域.为了自动 retain—release,ARC 在内存管理方面作了一些限定,即不能以 new 为开头命名编译器名称,也就是说不能以 new 开头命名属性,除非指定一个不一样命的 getter 方法.

三 NSURLConnettion , NSURLSession,AFN 以及SYNetFrame处理网络请求

1 NSURLConnettion

       NSURLConnettion是 Core Foundation/CFNetwork框架 API 之上的一个抽象. NSURLConnettion是用来指代 Core Foundation 框架中的一系列组件: NSURLRequest,NSURLResponse,NSURLProtocol,NSURLCache,NSHTTPCookieStorage,NSURLCredentialStorage 以及同名类 NSURLConnection.

       注1:原来的使用原理:一个 NSURLRequest 发送给 NSURLConnect.被委托对象(遵照 NSURLConnectionDeledate 和 NSURLConnectionDataDeledate 非正式协议)异步返回一个 NSURLResponce 和服务器的 NSData.

       注2:在一个请求发送给服务器的时候,系统会先查询缓存信息,而后根据策略和可用写的不一样,当在缓存中找到响应则直接返回.不然,系统将根据咱们的策略,将接到请求后的响应缓存到并返回.

注3:在把请求发送给服务器的时候,服务器会发出鉴权查询,这能够有共享的 cookie 或者机密存储来自动响应,或者由被委托的对象来响应.发送中的请求,也能够被 NSURLProtocol 拦截,以便在必要的时候,无缝的改变其请求.

NSURLConnettion是使用步骤:

1 获取一个 URL

2 经过 URL 建立一个请求

3 用NSURLConnettion发送请求

2 NSURLSession

       和 NSURLConnection 同样, NSURLSession 不只仅包括同名的 NSURLSession, 还包括NSURLRequest 和 NSURLCache. 同时将NSURLConnection 对应为NSURLSession,NSURLSessionFiguration 以及NSURLSession 的三个子类,即NSURLSessionTask,NSURLSessionUpLoadTask 和 NSULSessionDownLoadTask.

       和 NSURLConnection 相比, NSURLSession 最大的改变能够配置每个缓存的session 缓存, cookie 值,协议以及证书策略甚至跨程序共享这些信息.这保证了程序和网络框架之间的相互独立.每个 NSURLSession 有一个 NSURLSessionConfiguration 来进行初始化, NSURLSessionConfiguration指定了策略,以及在移动设备上加强性能的选项.

       NSURLSession 的另外一个特色就是 session Task, 用来处理的上传和下载.和 NSURLConnection 最大的不一样之处在于,全部的 task 共享其创造者 NSURLSession.

       注: NSURLSessionTask分析

       NSURLSessionTask 是一个抽象类,里面包含NSURLSessionDataTask  , NSURLSessionDownLoadTask 以及 NSURLSessionUpLoadTask三个子类.这三个子类封装了网络的基本任务:获取数据,上传和下载

 

       使用原理:当一个 NSURLSessionDataTask 完成的时候,会有一个返回的数据,一个 NSURLSessionDownLoadTask 完成的时候会带一个临时文件的路径.文件上传的时候也会返回必定的数据,因此能够说 NSURLSessionUpLoadTask 是继承于 NSURLSessionDataTask.全部的 Task 均可以取消,暂停和恢复,当暂停的时候会记录当前的位置,以便下载继续今后点继续下载.须要说明的是 NSURLSessionTask 是由 NSURLSession 建立的.

       NSURLSession的使用步骤:和 NSURLConnection 基本类似,而后使用resume方法来将它运行.

       1 获取一个 URL

       2 经过 URL 建立一个请求

       2.1 建立一个上传的NSData(UpLoad 上传的时候用)

       3 建立一个NSURLSession的单例

       4 经过NSURLSession发送请求(注:使用 resume)

3 NSURLSession 和 NSURLConnection 的区别

       NSURLSession即有 session 的代理方法又有 Task 的代理方法.session 的代理方法用来处理链接层的问题(服务器的信任,客户端证书的评估等),Task 的代理方法用来处理鉴权查询和与网络请求有关的问题.

4 AFN 框架

       AFN 是对 NSURLConnection 的一层封装

       AFN 的主要功能:

  • NSURLConnection

AFURLConnectionOperation

AFHTTPRequestOperation

AFHTTPRequestOperationManager(封装了经常使用的 HTTP 方法)

AFHTTPRequestOperationManager的属性

1 baseURL :开发者针要对 AFHTTPRequestOperationManager 自定义一个单例子类,设置 baseURL, 全部的网络访问,都只使用相对路径便可.

2 requestSerializer :请求数据格式/默认是二进制的 HTTP

3 responseSerializer :响应的数据格式/默认是 JSON 格式

4 operationQueue

5 reachabilityManager :网络链接管理器

 AFHTTPRequestOperationManager方法:

1 manager :方便建立管理器的类方法

2 HTTPRequestOperationWithRequest :在访问服务器时,若是要告诉服务器一些附加信息,都须要在 Request 中设置

3 GET

4 POST

  • NSURLSession

AFURLSessionManager

AFHTTPSessionManager(封装了经常使用的 HTTP 方法)

1 GET

2 POST

3 UIKit+AFNetWorking分类

4 NSProgress(利用 KVO)

  • 半自动的序列化和反序列化

AFURLRequestSerialization :请求的数据格式/默认是二进制的

AFURLResponseSerialization :响应的数据格式/默认是JSON格式

  • 附加功能

1 安全策略:(HTTPS 和AFSecurityPolicy)

2 网络检测: (对连接方式进行了封装和 AFNetWorkingReachabiliManager)

使用连接: http://www.cnblogs.com/worldtraveler/p/4736643.html

AFN 的使用步骤:

       1 建立一个请求操做管理者

       2 声明响应结果进行 JSON,XML等数据解析,返回 Data

       3 设置请求参数

       4 发送请求

       补充 ASI: (功能很强大,可是已经不更新了)

ASI 使用步骤:

1 获取 URL

2 获取 ASI 请求对象

   3 发送请求

AFN和ASI的区别

1、底层实现

1> AFN的底层基于OC的NSURLConnection和NSURLSession

2> ASI的底层基于纯C语言的CFNetwork框架

3> ASI的运行性能 高于 AFN

2、对服务器返回的数据处理

1> ASI没有直接提供对服务器数据处理的方式,直接返回data\string

2> AFN提供了多种对服务器数据处理的方式

* JSON处理

* XML处理

* 其余处理

3、监听请求的过程

1> AFN提供了success和failure两个block来监听请求的过程(只能监听成功和失败)

* success : 请求成功后调用

* failure : 请求失败后调用

2> ASI提供了3套方案,每一套方案都能监听请求的完整过程

(监听请求开始、接收到响应头信息、接受到具体数据、接受完毕、请求失败)

* 成为代理,遵照协议,实现协议中的代理方法

* 成为代理,不遵照协议,自定义代理方法

* 设置block

4、在文件下载和文件上传的使用难易度

1> AFN

* 不容易监听下载进度和上传进度

* 不容易实现断点续传

* 通常只用来下载不大的文件

2> ASI

* 很是容易实现下载和上传

* 很是容易监听下载进度和上传进度

* 很是容易实现断点续传

* 下载或大或小的文件都行

5、ASI提供了更多的实用功能

1> 控制圈圈要不要在请求过程当中转

2> 能够轻松地设置请求之间的依赖:每个请求都是一个NSOperation对象

3> 能够统一管理全部请求(还专门提供了一个叫作ASINetworkQueue来管理全部的请求对象)

* 暂停\恢复\取消全部的请求

* 监听整个队列中全部请求的下载进度和上传进度

 

四 正式协议和非正式协议

正式协议:指的是一个以@ protocol方式命名的方法列表,它要求显示的采用协议.包括@required 和@optional.

正义协议的意义:将正义协议中的方法剥离出来

非正式协议:定义为凡是 NSObject的类或其子类的类别.非正式协议的方法是本身定义的

五 HTTP 的 TCP/UDP 协议

       1 TCP/IP 或者 UDP/IP 协议组,包括三层网络协议即网络层,传输层,应用层.

       网络层协议包括:IP 协议, ICMP 协议, ARP 协议, RARP 协议以及 BOOTP 协议.

       传输层协议包括:TCP 和 UDP 协议

       应用层协议包括:FTP,HTTP,SMTP,DNSTELNET 等.

       TCP 须要三层握手, UDP 不须要

结论: HTTP 虽然是一个协议,可是其仍是基于 TCP 的协议.

       2 scoket

       socket 即 TCP/IP 或者 UDP/IP

       Scoket 的优缺点:

       优势:

  • 传输的数据为字节,传输的数据能够自定义,传输的数据小
  • 传输数据时间短,性能高
  • 适用于实时交互
  • 能够加密,数据安全

       缺点:

  • 需对传输的数据进行解析,转化为应用级的数据
  • 对开发人员的开发水平要求比较高
  • 相对于 HTTP 协议增长了开发量

HTTP 协议的优缺点

优势:

  • 基于应用级的接口,使用方便
  • 对程序员的要求水平不高,容错力强

缺点:

  • 传输数据量大
  • 容错能力差
  • 实时交互能力差

总结: Scoket 适用于对传输速度,安全性,实时交互,费用等要求较高的时候使用.HTTP则相反,适用于快速开发

 

六 JSON/XML 数据解析

       1 XML 便可扩展标记语言(标记是计算机能够理解的语言,经过标记计算机就能够处理事件).可扩展性指的是:定义这些标记语言的时候,既可使用国际通用的语言(HTML),也可使用自定义的标记语言.

1.1   简单来讲, XML 是一种数据的描述语言,可是呢, XML 没有语言的基本功能即被计算机所读取,所以 XML 须要用另外一种语言来解读.

1.2   XML 的基本特色

  • 是一种标记语言,很相似 HTML
  • 它设计是宗旨是传输数据而非显示数据
  • 它的标签没有预约义,所以要本身定义标签
  • 它具备自我描述性
  • 它是 W3C 推荐的数据格式

1.3小结

XML 是独立于软件和硬件以外的一种语言,它在 Web 中的做用几乎和 HTML 同样重要.XML 无处不在,它是软件中传递的最经常使用的数据格式.而且愈来愈流行.

注: XML 能够用于移动端和 PC 端,它是用来保存和传输数据的, HTML 是用来展现数据.

1.4 XML 的特色

  • XML 是不做为的.即 XML 仅仅是对数据的保存和传输并不对数据进行操做
  • XML 仅仅是一个纯文本,所以能处理文本的软件都能处理 XML.可是 XML 的标签要有特定的应用程序来处理.
  • XML 能够自定义标签
  • XML 是对 HTML 的补充而非替代. XML 是用来存储和传递数据的, HTML 是用来显示数据.

1.5 XML 的解析方式 DOM 和 SAX 解析

1.5.1 XML 的整体解析步骤:

  • XML 就是一棵树,所以解析的时候要先找到它的节点,从节点开始解析
  • 找到对应节点的最小节点即元素,而后对元素进行解析
  • 根据对应的元素,解析出对应的 String 并赋值给VideoInfo 这个类

1.5.2 DOM 和 SAX

DOM 即文档对象类型, SAX即当前两个主要使用的 API

1.5.3 DOM 和 SAX 的区别

> DOM 解析的时候将数据一次性读入内存并进行解析, XML 解析的时候是以流的方式,边读入边解析.所以对于比较大的 XML 是不适合用 DOM 解析的.

> DOM 用来处理 XML 文档比较复杂或者随机的处理 XML 文档中的数据.而 SAX 处理的时候则是从头至尾的一个个节点进行处理

       2 JSON 解析

       JSON 构建于两种结构:(相似于)键值对和值的有序列表

       2.1 JSON 的解析方法有: NSJSONSerialization(原生),TouchJson,SBJSON,

JSONKit.

       2.2 JSON 解析步骤

      

2.3 JSON解析方法: http://blog.csdn.net/enuola/article/details/7903632/

3 XML 和 JSON 的区别

JSON:没有结束标签,更短,读写速度快,可以使用内建的方法进行解析,使用数组,不使用保留字.总之 JSON 是一种轻量型的数据解析格式.

 

七 GCD 和 NSOperation

 

1 pthread 是 C 语言中的线程方式,很少作要求(了解)

建立方式: int resurt = pthread_creat(&pthread,NULL,demo,NULL);

2      NSThread 建立方式

  • 动态方法

NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];

[thread start];  

  • 静态方法

[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];  

  • 隐式建立方法

[self performSelectorInBackground:@selector(run) withObject:nil]; 

3      GCD

3.1使用消息循环的时候必须指定的两个条件:输入源和循环方式

Runloop 接收输入事件的来源有两种:输入源和定时源.

消息循环的两种方式: NSDefaultRunloopMode和 NSRunloopCommenModels

3.2 主线程的消息循环默认是开启的,子线程的消息循环须要手动开启方式以下:

[[NSRunloop currentRunloop] run];

3.3 GCD的执行步骤

> 建立任务

> 将任务添加到队列中

3.4 GCD 的两种执行任务的函数:同步执行函数(dispatch_sync)和异步执行函数(dispatch_async)

3.5 同步和异步函数决定了要不要开启子线程,并发队列和串行队列决定了执行的方式.

3.6 主队列:若主线程正在执行代码,则不调度线程等待主线程执行完成

主队列同步执行---形成死锁.

缘由:主队列等待主线程执行完毕,主线程等待主队列空闲

主队列和串行队列的区别:

串行队列:等上一个任务完成以后再调用当前任务

主队列:在主线程上运行的队列.当主线程上有任务执行的时候,不调度任务

3.7 全局队列在本质上是并发队列

3.8 比较

 

3.9 GCD 的特色

延迟操做:dispatch_after即在多少纳秒以后,在那个队列上,执行哪些操做

一次性执行:线程安全,能够代替互斥锁的使用

调度组:多个异步任务完成以后再作其余操做即dispatch_group_t

4      NSOperation

4.1 NSOperation是一个抽象类

抽象类特色:不能直接使用,由于它的方法在本身的类中没有实现,约束子类具备相同的属性和方法,所以抽象类要使用子类

4.2 NSOperation的子类有三种

NSInvocationOperation,NSBlockOperation 和自定义的 operation

4.3 NSOperation 和 NSOperationQueue

先将要执行的操做封装到NSOperation 中,而后再将NSOperation添加到NSOperationQueue 中.系统会将任务取出,并放在新线程上执行

NSOperation执行的时候默认是不会开启新线程的,可是添加到NSOperationQueue 中后会开启新线程

4.4 NSOperation和 GCD 比较

> GCD 是在 iOS4.0以后出现的,是对多核 CPU 作了优化,是 C 语言是技术

GCD 是将任务添加到队列并以同步/异步执行的函数

GCD 的特色:延迟操做,一次性执行和调度组

> NSOperation iOS2.0推出,4.0后根据 GCD进行了重写

将操做添加到队列,就会自动执行操做的函数

特色:最大并发数,队列的暂停/继续,取消所有队列的操做,指定操做间的依赖关系

最大并发数:同时执行的任务数.

注:指定完后,线程先去线程池中寻找有可用的线程,没有找到后再建立新线程.而且线程执行完后放入线程池中,以待重用.

4.5 服务质量qualityOfService 用来设置操做的优先级

4.6 监听操做的完成

4.7 设置操做依赖: [opB addDependence:opA];操做 B 依赖于操做 A

 

八 自动布局

1 自动布局通过的三个时期

MagicNumber -> autoresizingMask -> autolayout(6.0)

2        Masonry的使用

语法通常是 make.equalTo or make.greaterThanOrEqualTo or make.lessThanOrEqualTo + 倍数和位移修正

九 KVC KVO

1 KVC 键值编码

1.1   做用:KVC 提供了一种在运行状态而非编译状态状况下动态访问对象的属性/成员变量的方法.即 KVC 能够经过名称使用该名称的属性.

1.2   使用注意:

  • valueForKey: 是以字符串的形式调用对象的 get 方法, setValue: forkey 是以字符串的形式调用对象的 set 方法
  • 对于基本数据类型, KVC会将其封装为 OC 对象的类型.即基本数据类型封装为 NSNumber, 结构体为 NSValue
  • 在使用 KVC 的时候,当经过字符串的名称找不到对应的属性时,会调用 valueForUndefineKey: 或者 setValue: forUndefineKey 方法,默认会返回异常
  • KVC 能够访问对象的私有属性,并进行修改.这是由于 KVC 能够经过accessInstanceVariablesDirectly方法,并令其返回为 NO.另外 KVC 的方法是定义在 NSKeyValueCoding 的类别中,该类别是附加在 NSObject 上的,全部的对象都有该方法
  • 对于一些特殊的对象调用 KVC 会有特殊的效果,如数组 NSArray 和集合 NSSet调用 valueForKey:  方法的时候,会对每个属性用 valueForKey方法
  • 注: valueForKey和valueForKeyPath: 的区别,前者只会在当前类中查找对应的属性,找不到就返回异常.后面的方法会在整个类文件中查找对应的属性

1.3   实现原理

  • 首先查找对象是否带有 someKey 这个方法,若是没找到,会继续查找对象是否带有someKey这个实例变量(iVar),若是尚未找到,程序会继续试图调用 -(id) valueForUndefinedKey:这个方法。若是这个方法仍是没有被实现的话,程序会抛出一个NSUndefinedKeyException 异常错误
  • 补充:KVC查找方法的时候,不只仅会查找someKey这个方法,还会查找getsomeKey这个方法, 前面加一个get,或者_someKey以_getsomeKey这几种形式。同时,查找实例变量的时候也会不只仅查找someKey这个变量,也会查找 _someKey这个变量是否存在

2        KVO 键值监听 保持视图和模型的同步

2.1   做用:当指定的对象发生改变的时候,该对象就会接收到通知.即每次指定的观察者发生改变的时候,就会通知相应的观察者

2.2   使用方法:

  • 注册:指定被观察者的属性
  • 实现回调方法
  • 移除观察

2.3   特色:当更改被监听的值的时候,监听者会当即接收到通知

2.4   KVO中谁要监听谁注册,而后对响应进行处理,使得观察者与被观察者彻底解耦。KVO只检测类中的属性,而且属性名都是经过NSString来查找,编译器不会检错和补全,所有取决于本身

3        二者之间的关系

KVC 是 KVO 实现的关键技术

 

十 通知,代理, block 以及单例设计模式

1 简单对比

1.1   通知:

特色:一对多,多对多,多对一

原理:任何观察者只要接收通知的名称和发送者发送通知的名称相同,则就会接到发送者发送的通知消息

实现步骤:发送通知,注册观察者接收通知,移除通知

1.2   代理

特色:一对一

原理:首先分清代理和被代理者.即被代理者不适合作某一件事,让代理来作

使用步骤:(如图 注: B 是被代理者, A 是代理)

 

1.3   block

block 是一个代码块,它能够传递任何数据

特色:一对一

原理:就是 block 函数的使用,即在一个地方声明一个block, 在使用的时候,只要在使用的时候调用便可

使用步骤:首先建立一个 block 函数,在须要的地方调用 block 函数

1.4   单例设计模式

单例:即一个类中只有一个实例,而且自行实例化后能够在整个类中使用

使用步骤:

  • 为单例对象实现一个静态实例,并初始化,而后设置成nil,
  • 实现一个实例构造方法检查上面声明的静态实例是否为nil,若是是则新建并返回一个本类的实例,
  • 重写allocWithZone方法,用来保证其余人直接使用alloc和init试图得到一个新实力的时候不产生一个新实例,
  • 适当实现allocWitheZone,copyWithZone,release和autorelease。

 

十一 四种动画

1 动画的三要素

  • CALayer
  • CAAnimation
  • addAnimation

1.1 CALayer和 UIView 很类似, UIView 有的功能 CALayer 基本上都有,所以说 CALayer 是覆盖在 UIView 上薄薄的一层.UIView 和 CALayer 的区别是: UIView 上有点击事件.CALayer 的用途有:一是对 view 的相关属性设置(如圆角等),二是对 View 的动画操做,所以能够说对 view 上的动画操做,本质上是对 view 上的 layer 操做

1.2  CAAnimation 即动画的分类

CABasicAnimation(基础动画):

经过设定起点,终点,时间,动画会沿着设置点进行移动.

CAKeyframeAnimation(关键帧动画):

       即关键点的 frame,就是经过设置起点,中间的关键点,终点和时间, CALayer 就会沿着设定的点移动.

CAAnimationGroup(组动画):

       即将多个动画或者多种动画组合成一个组里面依次运行.

CATransition(转场动画):

       苹果原生的一些特定的动画

2      动画的实现步骤

2.1 CALayer 的初始化并设置属性

2.2 设置动画的类型并设置动画的属性

2.3 添加动画

 

十二 数据库的使用

数据存储的方式:plist,归档(NSKeyedArchiver),偏好设置(NSUserDefaults),write 写入文件,SQLite,Cocoa Data

       使用方式:

http://www.jianshu.com/p/933a035a6ad4

http://www.jianshu.com/p/14fd706b632d

十四 第三方 SDK 集成

       注册成为开发者à下载 SDKà看文档

十五 runtime

       运行时即在程序运行的时候要干的事情.

产生的缘由是 C 语言中函数的执行是在编译的时候就决定好了的,要执行的函数以及函数的执行顺序等.OC是继承于 C 的,是在 C 的基础上添加了面向对象的特性,面向对象要求把编译和连接的函数尽可能向后推迟.OC和 C 有很大的不一样,其中就包括 OC 的函数, OC 函数的调用属于动态调用,就是说 OC 中在编译的阶段仅仅编译一部分函数,而大部分函数是在程序运行的时候才动态编译的,这就须要用到运行时.

运行时能够在程序运行的时候在动态的编译和连接函数.同时运行时还具备自省即查看对象正在作的,不能作的以及合适的分发消息

更深刻的了解:

OC 的 runtime 是一个运行时库,它是一个主要有 C 语言和汇编语言写成库,给 C 添加了面向对象的特性建立了 OC.也就是说它是在类方法中被加载,完成方法的分发,方法的转发等.OC 的 runtime 创造了全部的结构体,从而让面向对象成为可能.

详细了解: http://www.cocoachina.com/ios/20141008/9844.html

 

十七 APPWatch 和 XMPP

1 APPWatch的功能实现和控件基本和 iOS 一致的.

使用的注意点:

  • 是在 watch1.0的入口是先建立一个 iOS 程序以后再添加 watch 的入口.
  • 如今的 watch 程序的使用 swift 比较更好一点.
  • 注意添加表芯
  • Watch 的代码运行分为两部分,一部分是在 iPhone 上执行,另一部分在 watch 上执行.注,应将比较大的资源文件放在 iPhone 上执行.
  • 实现 watch 和 iPhone 连接执行基本是在底层的 WatchKit 框架,由于 iPhone 和 watch 中连接的底层框架都是WatchKit.
  • 默认状况下watch 的空间排列是上下排列的,并不能左右排列,所以要控件左右排列的时候须要用到 group 这个控件.
  • Watch 目前仅有38mm 和42mm 两种
  • 因为 watch 是新出的,因此里面的属性和方法仍是不多的,能够很方便的查看,所以 watch 开发能够很容易查看

2       XMPP 即时通信

即时通信的实质是实时.

XMPP 实现步骤:节点链接服务器à服务器利用本地目录系统中的证书对其认证à节点指定目标地址,服务器告知目标状态à服务器查找链接并认证à节点之间进行交互

注: 只要知道程序的协议和程序的端口就能进行交互

 

十八 BUG 调试

http://stackoverflow.com

十九 git 和 SVN 及其比较

1 SVN属于集中化版本控制系统,能够理解为 SVN = 版本控制+备份服务器.SVN 支持并行读写文件,支持代码的版本化管理.其功能包括取出,导入,更新,分支,还原,更名等

       特色: SVN 大多采用图形化管理,易于上手.

2 Git 是一个分布式版本管理系统,其功能包括clone,pull,push,branch,merge,

rebase.

       特色:程序代码版本化管理

3       SVN 和 Git 的优缺点

3.1   SVN 的优缺点: SVN对中文支持好,操做简单,使用没有难度,实施人员均可轻松上手。使用界面统一,功能完善,操做方便

3.2   Git 的优缺点: 对`程序源代码进行差别化的版本管理,代码库占极少的空间。易于代码的分支化管理。不支持中文,图形界面支持差,使用难度大。不易推广。

4 总结: SVN更适用于项目管理, Git仅适用于代码管理。                                                                                          

相关文章
相关标签/搜索