小知識點--小結

一 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僅適用於代碼管理。                                                                                          

相關文章
相關標籤/搜索