中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
iOS 整體框架類圖
Cocoa框架是iOS應用程序的基礎(chǔ),了解Cocoa框架,對開發(fā)iOS應用有很大的幫助。
1、Cocoa是什么?
Cocoa是OS X和 iOS操作系統(tǒng)的程序的運行環(huán)境。
是什么因素使一個程序成為Cocoa程序呢?不是編程語言,因為在Cocoa開發(fā)中你可以使用各種語言;也不是開發(fā)工具,你可以在命令行上就可以創(chuàng)建Cocoa程序。Cocoa程序可以這么說,它是由一些對象組成,而這些對象的類最后都是繼承于它們的根類 :NSObject。而且它們都是基于Objective-C運行環(huán)境的。
1.1、Cocoa框架
iOS中,Cocoa眾多框架中最重要最基本的兩個框架是:Foundation 和 UIKit。
Foundation 和界面無關(guān),也可以說和界面無關(guān)的類基本是Foundation框架的,和界面相關(guān)的是UIKit框架。
這兩個框架在系統(tǒng)中處于的位置如圖:
1.2、Foundation框架
好吧,那我們看看兩個框架的類組織架構(gòu)圖,第一個先看Foundation的,三個圖,包括了Foundation所以的類,圖中灰色的是iOS不支持的,灰色部分是OS X系統(tǒng)的。
 
將上圖Foundation框架中的類進行邏輯分類如下:
值對象
集合
操作系統(tǒng)服務 包括下面三個:文件系統(tǒng)和URL   進程間通訊。 這個范疇中的大部分類代表不同的系統(tǒng)端口、套接字、和名字服務器,對實現(xiàn)底層的IPC很有用。NSPipe代表一個BSD管道,即一種進程間的單向通訊通道。   線程和子任務。 NSThread類使您可以創(chuàng)建多線程的程序,而各種鎖(lock)類則為彼此競爭的線程在訪問進程資源時提供各種控制機制。通過NSTask,您的程序可以分出      一個子進程來執(zhí)行其它工作或進行進度監(jiān)控。
通知
歸檔和序列化
表達式和條件判斷
Objective-C語言服務
1.3 UIKit框架
應用程序可以通過三種方式使用UIKit創(chuàng)建界面
在用戶界面工具(interface Buidler)從對象庫里 拖拽窗口,視圖或者其他的對象使用。
用代碼創(chuàng)建
通過繼承UIView類或間接繼承UIView類實現(xiàn)自定義用戶界面
框架類組織架構(gòu)圖:
在圖中可以看出,responder 類是圖中最大分支的根類,UIResponder為處理響應事件和響應鏈 定義了界面和默認行為。當用戶用手指滾動列表或者在虛擬鍵盤上輸入時,UIKit就生成時間傳送給UIResponder響應鏈,直到鏈中有對象處理這個事件。相應的核心對象,比如:UIApplication  ,UIWindow,UIView都直接或間接的從UIResponder繼承。
2、Cocoa對象
2.1 Objective-C是面向?qū)ο蟮恼Z言
Objective-C和Java C++一樣,有封裝,繼承,多態(tài),重用。但是它不像C++那樣有重載操作法、模版和多繼承,也沒有Java的垃圾回收機制。
2.2 Objective-C的優(yōu)點
Objective-C語言有C++ Java等面向?qū)ο蟮奶攸c,那是遠遠不能體現(xiàn)它的優(yōu)點的。Objective-C的優(yōu)點是它是動態(tài)的。動態(tài)能力有三種:
動態(tài)類-運行時確定類的對象
動態(tài)綁定-運行時確定要調(diào)用的方法
動態(tài)加載--運行時為程序加載新的模塊
2.3 動態(tài)能力相關(guān)的isa指針
每個Objective-C對象都有一個隱藏的數(shù)據(jù)結(jié)構(gòu),這個數(shù)據(jù)結(jié)構(gòu)是Objective-C對象的第一個成員變量,它就是isa指針。這個指針指向哪呢?它指向一個類對象(class object  記住它是個對象,是占用內(nèi)存空間的一個變量,這個對象在編譯的時候編譯器就生成了,專門來描述某個類的定義),這個類對象包含了Objective-C對象的一些信息(為了區(qū)分兩個對象,我把前面提到的對象叫Objective-C對象),包括Objective-C對象的方法調(diào)度表,實現(xiàn)了什么協(xié)議等等。這個包含信息就是Objective-C動態(tài)能力的根源了。
那我們看看isa指針類型的數(shù)據(jù)結(jié)構(gòu)是什么樣的?如果拋開NSObject對象的其他的成員數(shù)據(jù)和變量,NSObject可以看成這樣:
[cpp] view plaincopy
@interface NSObject <NSObject> {
Class    isa;
}
不考慮@interface關(guān)鍵字在編譯時的作用,可以把NSObject更接近C語言結(jié)構(gòu)表示為:[cpp] view plaincopy
struct NSObject{
Class isa;
}
Class是用typedef 定義的[cpp] view plaincopy
typedef struct objc_class *Class;
那NSObject可以這么寫了[cpp] view plaincopy
struct NSObject{
objc_class *isa
}
那objc_class的結(jié)構(gòu)是什么樣的呢?大概是這樣的:[cpp] view plaincopy
struct objc_class {
Class isa;
Class super_class;
const char *name;
long version;
long info;
long instance_size;
struct objc_ivar_list *ivars;
struct objc_method_list **methodLists;
struct objc_cache *cache;
struct objc_protocol_list *protocols;
}
這里會看到,在這個結(jié)構(gòu)體里還有一個isa指針,又是一重指向,是不是有種到了盜夢空間的感覺。不用緊張,take easy,不會有那么多層次的,這里的isa指針指向的是元類對象(metaclass object),帶有元字,證明快到頭了。那元對象有啥用呢?它用來存儲的關(guān)于類的版本,名字,類方法等信息。所有的元類對象(metaclass object)都指向 NSObject的元類對象,到頭還是NSObject。一共三次:類對象->元類對象->NSObject元類對象。   為了得到整個類組織架構(gòu)的信息,objc_class結(jié)構(gòu)里定義了第二個成員變量Class super_class,它指向父類的類對象。說了這么多,可能關(guān)系縷不清楚,有道是一張圖勝過千言萬語
圖中可以看出,D3繼承D2,D2繼承D1,D1最終繼承NSObject。下圖從D3的一個對象開始,排列出D3 D2 D1 NSObject 類對象,元類對象等關(guān)系。
圖中的箭頭都是指針的指向。
2.4 根類 NSObject
NSObject是大部分Objective-C類的根類,它沒有父類。其它類繼承NSObject,訪問Objective-C運行時系統(tǒng)的基本接口,這樣其他類的實例可以獲得運行時的能力。
2.4.1 根類和根類協(xié)議
NSObject不但是個類名,NSObject也是個協(xié)議的名稱,參考NSObject協(xié)議 , NSObject協(xié)議指定了根類必須實現(xiàn)的接口。
2.4.2 根類的主要方法:
分配、初始化、和復制:
alloc和allocWithZone:方法用于從某內(nèi)存區(qū)域中分配一個對象內(nèi)存,并使對象指向其運行時的類定義。
init方法是對象初始化。
new是一個將簡單的內(nèi)存分配和初始化結(jié)合起來的方法。
copy和copyWithZone:對象的保持和清理:
retain方法增加對象的保持次數(shù)。
release方法減少對象的保持次數(shù)。
autorelease方法也是減少對象的保持次數(shù),但是以推遲的方式。
retainCount方法返回對當前的保持次數(shù)。
dealloc方法由需要釋放對象的實例變量以及釋放動態(tài)分配的內(nèi)存的類實現(xiàn)。內(nèi)省和比較
NSObjec有很多方法可以查詢對象的運行時信息。這些內(nèi)省方法有助于找出對象在類層次中的位置,確定對象是否實現(xiàn)特定的方法,以及測試對象是否遵循某種協(xié)議。下面是部分方法
superclass和class方法(實現(xiàn)為類和實例方法)分別以Class對象的形式返回接收者的父類和類。
您可以通過isKindOfClass:和isMemberOfClass:方法來確定對象屬于哪個類。后者用于測試接收者是否為指定類的實例。isSubclassOfClass:類方法則用于測試類的繼承性。
respondsToSelector:方法用于測試接收者是否實現(xiàn)由選擇器參數(shù)標識的方法。instancesRespondToSelector:類方法則用于測試給定類的實例是否實現(xiàn)指定的方法。
conformsToProtocol:方法用于測試接收者(對象或類)是否遵循給定的協(xié)議。
isEqual:和hash方法用于對象的比較。
description方法允許對象返回一個內(nèi)容描述字符串;這個方法的輸出經(jīng)常用于調(diào)試(“print object”命令),以及在格式化字符串中和“%@”指示符一起表示對象。
對象的編碼和解碼
下面的方法和對象的編解碼(作為歸檔過程的一部分)有關(guān):
encodeWithCoder:和initWithCoder:是NSCoding協(xié)議僅有的方法。前者使對象可以對其實例變量進行編碼,后者則使對象可以根據(jù)解碼過的實例變量對自身進行初始化。
NSObject類中聲明了一些于對象編碼有關(guān)的方法:classForCoder:、replacementObjectForCoder:、和awakeAfterUsingCoder:。
消息的轉(zhuǎn)發(fā)
forwardInvocation:允許一個對象將消息轉(zhuǎn)發(fā)給另一個對象。
消息的派發(fā)
在performSelector開頭的一些方法允許你延遲后派發(fā)指定消息,而且可以將消息(同步或異步的消息)從輔助線程派發(fā)到主線程。
2.5 Cocoa對象生命周期
對象的四種內(nèi)存管理方式,如下圖所示
對象的生命周期—簡化視圖
保持接收到的對象
拷貝接收到的對象
自動釋放池
參考:
1、http://algorithm.com.au/downloads/talks/objective-c-internals/objective-c-internals.pdf
2、http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/Introduction/Introduction.html
3、http://www.cnblogs.com/csutanyu/archive/2011/12/12/Objective-C_memory_layout.html
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Swift與Objective
java 與oc之間的比較
向iOS開發(fā)者介紹C++(一)
Cocoa是什么???
Cocoa對象 根類
Google Objective-C 風格指南
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服