你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 蘋果iOS語法總結匯總

蘋果iOS語法總結匯總

編輯:IOS開發綜合
前言: iOS是由蘋果公司開發的移動操作系統[1]。蘋果公司最早於2007年1月9日的Macworld大會上公布這個系統,最初是設計給iPhone使用的,後來陸續套用到iPod touch、iPad以及Apple TV等產品上。iOS與蘋果的Mac OS X操作系統一樣,屬於類Unix的商業操作系統。 ------出自百度百科

1、Cocoa是什麼?

Cocoa是OS X和 iOS操作系統的程序的運行環境。

是什麼因素使一個程序成為Cocoa程序呢?不是編程語言,因為在Cocoa開發中你可以使用各種語言;也不是開發工具,你可以在命令行上就可以創建 Cocoa程序。Cocoa程序可以這麼說,它是由一些對象組成,而這些對象的類最後都是繼承於它們的根類 :NSObject。而且它們都是基於Objective-C運行環境的。

1.1、Cocoa框架

iOS中,Cocoa眾多框架中最重要最基本的兩個框架是:Foundation 和 UIKit。(前者是基礎庫,後者主要是UI庫,高級對象)

Foundation 和界面無關,也可以說和界面無關的類基本是Foundation框架的,和界面相關的是UIKit框架。

這兩個框架在系統中處於的位置如圖:(以下兩個圖基本類似,主要是為了方便理解)

\

\

 

 

 

下面來解析下上面的圖:
a、Core OS是位於iOS系統架構最下面的一層是核心操作系統層,它包括內存管理、文件系統、電源管理以及一些其他的操作系統任務。它可以直接和硬件設備進行交互。作為app開發者不需要與這一層打交道。
b、Core Services是核心服務層,可以通過它來訪問iOS的一些服務。
c、Media是媒體層,通過它我們可以在應用程序中使用各種媒體文件,進行音頻與視頻的錄制,圖形的繪制,以及制作基礎的動畫效果。
d、Cocoa Touch是可觸摸層,這一層為我們的應用程序開發提供了各種有用的框架,並且大部分與用戶界面有關,本質上來說它負責用戶在iOS設備上的觸摸交互操作。
 

 

1.2、Foundation框架

好吧,那我們看看兩個框架的類組織架構圖,第一個先看Foundation的,三個圖,包括了Foundation所以的類,圖中灰色的是iOS不支持的,灰色部分是OS X系統的。

\\

\

將上圖Foundation框架中的類進行邏輯分類如下:

  1. 值對象
  2. 集合
  3. 操作系統服務 包括下面三個:文件系統和URL 進程間通訊。這個范疇中的大部分類代表不同的系統端口、套接字、和名字服務器,對實現底層的IPC很有用。NSPipe代表一個BSD管道,即一種進程間的單向通訊通道。 線程和子任務。NSThread類使您可以創建多線程的程序,而各種鎖(lock)類則為彼此競爭的線程在訪問進程資源時提供各種控制機制。通過NSTask,您的程序可以分出 一個子進程來執行其它工作或進行進度監控。
  4. 通知
  5. 歸檔和序列化
  6. 表達式和條件判斷
  7. Objective-C語言服務

1.3 UIKit框架

應用程序可以通過三種方式使用UIKit創建界面
  1. 在用戶界面工具(interface Buidler)從對象庫裡 拖拽窗口,視圖或者其他的對象使用。
  2. 用代碼創建
  3. 通過繼承UIView類或間接繼承UIView類實現自定義用戶界面
  框架類組織架構圖: \    

在圖中可以看出,responder 類是圖中最大分支的根類,UIResponder為處理響應事件和響應鏈 定義了界面和默認行為。當用戶用手指滾動列表或者在虛擬鍵盤上輸入時,UIKit就生成時間傳送給UIResponder響應鏈,直到鏈中有對象處理這個 事件。相應的核心對象,比如:UIApplication ,UIWindow,UIView都直接或間接的從UIResponder繼承。

 

 

 

2、Cocoa對象

 

2.1 Objective-C是面向對象的語言

Objective-C和Java C++一樣,有封裝,繼承,多態,重用。但是它不像C++那樣有重載操作法、模版和多繼承,也沒有Java的垃圾回收機制。

 

 

 

2.2Objective-C的優點

Objective-C語言有C++ Java等面向對象的特點,那是遠遠不能體現它的優點的。Objective-C的優點是它是動態的。動態能力有三種:

動態類-運行時確定類的對象

動態綁定-運行時確定要調用的方法

動態加載--運行時為程序加載新的模塊

 

 

 

2.3 動態能力相關的isa指針

每個Objective-C對象都有一個隱藏的數據結構,這個數據結構是Objective-C對象的第一個成員變量,它就是isa指針。這個指針指向哪 呢?它指向一個類對象(class object 記住它是個對象,是占用內存空間的一個變量,這個對象在編譯的時候編譯器就生成了,專門來描述某個類的定義),這個類對象包含了Objective-C 對象的一些信息(為了區分兩個對象,我把前面提到的對象叫Objective-C對象),包括Objective-C對象的方法調度表,實現了什麼協議等 等。這個包含信息就是Objective-C動態能力的根源了。

那我們看看isa指針類型的數據結構是什麼樣的?如果拋開NSObject對象的其他的成員數據和變量,NSObject可以看成這樣:

  1. @interfaceNSObject{
  2. Classisa;
  3. }

不考慮@interface關鍵字在編譯時的作用,可以把NSObject更接近C語言結構表示為:

  1. structNSObject{
  2.   Classisa;
  3. }

Class是用typedef 定義的

typedefstructobjc_class*Class;

那NSObject可以這麼寫了

  1. structNSObject{
  2.   objc_class*isa
  3. }
那objc_class的結構是什麼樣的呢?大概是這樣的:
  1. structobjc_class{
  2. Classisa;
  3.  
  4. Classsuper_class;
  5.  
  6. constchar*name;
  7.  
  8. longversion;
  9. longinfo;
  10.  
  11. longinstance_size;
  12. structobjc_ivar_list*ivars;
  13. structobjc_method_list**methodLists;
  14.  
  15. structobjc_cache*cache;
  16. structobjc_protocol_list*protocols;
  17. }

這裡會看到, 在這個結構體裡還有一個isa指針,又是一重指向,是不是有種到了盜夢空間的感覺。不用緊張,take easy,不會有那麼多層次的,這裡的isa指針指向的是元類對象(metaclass object),帶有元字,證明快到頭了。那元對象有啥用呢?它用來存儲的關於類的版本,名字,類方法等信息。所有的元類對象(metaclass object)都指向 NSObject的元類對象,到頭還是NSObject。一共三次:類對象->元類對象->NSObject元類對象。

為了得到整個類組織架構的信息,objc_class結構裡定義了第二個成員變量Class super_class,它指向父類的類對象。說了這麼多,可能關系縷不清楚,有道是一張圖勝過千言萬語

\

圖中可以看出,D3繼承D2,D2繼承D1,D1最終繼承NSObject。下圖從D3的一個對象開始,排列出D3 D2 D1 NSObject 類對象,元類對象等關系。

\

圖中的箭頭都是指針的指向。

 

 

 

2.4 根類 NSObject

NSObject是大部分Objective-C類的根類,它沒有父類。其它類繼承NSObject,訪問Objective-C運行時系統的基本接口,這樣其他類的實例可以獲得運行時的能力。

\

 

 

 

2.4.1 根類和根類協議

NSObject不但是個類名,NSObject也是個協議的名稱,參考NSObject協議, NSObject協議指定了根類必須實現的接口。

 

 

 

2.4.2 根類的主要方法:
分配、初始化、和復制:

alloc和allocWithZone:方法用於從某內存區域中分配一個對象內存,並使對象指向其運行時的類定義。
init方法是對象初始化。
new是一個將簡單的內存分配和初始化結合起來的方法。
copy和copyWithZone:

對象的保持和清理:

retain方法增加對象的保持次數。
release方法減少對象的保持次數。
autorelease方法也是減少對象的保持次數,但是以推遲的方式。
retainCount方法返回對當前的保持次數。
dealloc方法由需要釋放對象的實例變量以及釋放動態分配的內存的類實現。

內省和比較

NSObjec有很多方法可以查詢對象的運行時信息。這些內省方法有助於找出對象在類層次中的位置,確定對象是否實現特定的方法,以及測試對象是否遵循某種協議。下面是部分方法
superclass和class方法(實現為類和實例方法)分別以Class對象的形式返回接收者的父類和類。
您可以通過isKindOfClass:和isMemberOfClass:方法來確定對象屬於哪個類。後者用於測試接收者是否為指定類的實例。isSubclassOfClass:類方法則用於測試類的繼承性。
respondsToSelector:方法用於測試接收者是否實現由選擇器參數標識的方法。instancesRespondToSelector:類方法則用於測試給定類的實例是否實現指定的方法。
conformsToProtocol:方法用於測試接收者(對象或類)是否遵循給定的協議。
isEqual:和hash方法用於對象的比較。
description方法允許對象返回一個內容描述字符串;這個方法的輸出經常用於調試(“print object”命令),以及在格式化字符串中和“%@”指示符一起表示對象。

對象的編碼和解碼

下面的方法和對象的編解碼(作為歸檔過程的一部分)有關:
encodeWithCoder:和initWithCoder:是NSCoding協議僅有的方法。前者使對象可以對其實例變量進行編碼,後者則使對象可以根據解碼過的實例變量對自身進行初始化。
NSObject類中聲明了一些於對象編碼有關的方法:classForCoder:、replacementObjectForCoder:、和awakeAfterUsingCoder:。

消息的轉發

forwardInvocation:允許一個對象將消息轉發給另一個對象。

消息的派發

在performSelector開頭的一些方法允許你延遲後派發指定消息,而且可以將消息(同步或異步的消息)從輔助線程派發到主線程。

2.5 Cocoa對象生命周期

對象的四種內存管理方式,如下圖所示

對象的生命周期—簡化視圖

\

保持接收到的對象

\

拷貝接收到的對象

\

自動釋放池

\

另附一張網上的思維導圖,這份圖講述了包括iOS開發知識與能力體系

分辨率為2042*3917,點擊查看大圖:\

   
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved