• 小知识点--小结


    一 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)

    使用链接: 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> AFN的底层基于OC的NSURLConnection和NSURLSession

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

    3> ASI的运行性能 高于 AFN

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

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

    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解析方法: 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仅适用于代码管理。                                                                                          

  • 相关阅读:
    edgecore
    十问 Linux 虚拟内存管理 (glibc)
    Covered Path
    Journey Planning
    K for the Price of One
    Candies!
    2种方式解决nginx负载下的Web API站点里swagger无法使用
    分布式环境下的数据一致性问题的方案讨论
    static,你还敢用吗?
    分离EF connectionString里的db连接串
  • 原文地址:https://www.cnblogs.com/xuan-yuan/p/5802378.html
Copyright © 2020-2023  润新知