一 OC 小结


1 什么是 OC 语言?

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

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.同时该层还提供了硬件和系统框架之间的接口,但出于安全考虑,只有有限的框架能使用.

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)

使用链接:

AFN 的使用步骤:

       1 创建一个请求操作管理者

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

       3 设置请求参数

       4 发送请求

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

ASI 使用步骤:

1 获取 URL

2 获取 ASI 请求对象

   3 发送请求

AFN和ASI的区别

一、底层实现

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

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

3> ASI的运行性能 高于 AFN

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

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

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

* JSON处理

* XML处理

* 其他处理

三、监听请求的过程

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

* success : 请求成功后调用

* failure : 请求失败后调用

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

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

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

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

* 设置block

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

1> AFN

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

* 不容易实现断点续传

* 一般只用来下载不大的文件

2> ASI

* 非常容易实现下载和上传

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

* 非常容易实现断点续传

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

五、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解析方法:

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仅适用于代码管理。