這篇文章主要介紹了IOS如何實(shí)現(xiàn)靜態(tài)方法與動態(tài)方法,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

IOS 靜態(tài)方法與動態(tài)方法詳解
1、問題提出
iOS中有靜態(tài)方法與動態(tài)方法,那么兩種方法的異同是什么?
2、問題分析
因?yàn)槊總€對象都由相應(yīng)的數(shù)據(jù)結(jié)構(gòu)與方法相構(gòu)成,一個程序可能有多個屬于同一個類的對象,而每個對象的數(shù)據(jù)結(jié)構(gòu)應(yīng)該是不一的,但方法是相同的,若為每個對象開辟內(nèi)存空間來存儲方法,必然是對內(nèi)存空間極大的浪費(fèi)。因此apple是通過類對象與元類來解決這個問題的。
從根本來說,c++、objective-c、java都發(fā)源于c語言,因此這些語言實(shí)際上可以理解了經(jīng)過封裝的c語言,所以它們更加方便使用但效率不如c語言。
因此,對象的底層實(shí)際上就是結(jié)構(gòu)體,其有兩個重要的指針,一個是isa指針,一個是super指針。
isa指針:負(fù)責(zé)指向類對象,用來表明自己是什么類類型,并能調(diào)用類對象中的動態(tài)方法。
super指針:表示對象的繼承關(guān)系,指向父類,從而能調(diào)用父類的相應(yīng)方法。
類對象:類對象是由元類生成的對象,負(fù)責(zé)存儲動態(tài)方法,動態(tài)方法在編譯器是不確定的,因此編譯器也無法檢測與動態(tài)方法相關(guān)的錯誤,動態(tài)方法的調(diào)用是在運(yùn)行期中通過消息機(jī)制來執(zhí)行的,因此也只有運(yùn)行期才會報(bào)錯。
元類:元類是用來存儲靜態(tài)方法列表的,編譯器能檢測。
其整體關(guān)系如下圖所示:

結(jié)論
兩者的差異包括:(1)方法列表是區(qū)分開的,分別存儲在類對象與元類中。
(2)動態(tài)方法是在運(yùn)行期中調(diào)用,編譯器無法檢測錯誤,靜態(tài)方法是在編譯器就確定,編譯器能檢測錯誤。
(3)動態(tài)方法由對象調(diào)用,靜態(tài)方法由類調(diào)用,因?yàn)檎{(diào)用方法是通過isa和super指針實(shí)現(xiàn)的。因此對象只能調(diào)用類對象的方法,而類對像能調(diào)用元類的方法。
3、相關(guān)代碼
(1)靜態(tài)、動態(tài)方法創(chuàng)建對象
大部分類的靜態(tài)方法與動態(tài)方法中都存在相應(yīng)的方法可以用于創(chuàng)建對象,除了兩者的本質(zhì)差別,兩者的結(jié)果是無差異的,都是在堆中創(chuàng)建一個對象的內(nèi)存,并初始化好各種功能指針。 所以更加推薦使用靜態(tài)方法創(chuàng)建對象,方便編譯器檢查錯誤和代碼風(fēng)格更簡潔。從以下代碼的結(jié)果(注釋)中可得驗(yàn)證以上結(jié)論。
//tset --靜態(tài)方法與動態(tài)方法區(qū)別探究 NSString*haha = @"luo1"; //(__NSCFConstantString *) $0 = 0x000dc054 @"luo1" NSString *hehe = [NSStringstringWithFormat:@"luo2"]; //(__NSCFString *) $1 = 0x7904a370 @"luo2" NSString *xixi = [[NSString alloc] initWithFormat:@"luo3"]; //(__NSCFString *) $2 = 0x7904a140 @"luo3"
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“IOS如何實(shí)現(xiàn)靜態(tài)方法與動態(tài)方法”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián)建站,關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.yijiale78.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
分享標(biāo)題:IOS如何實(shí)現(xiàn)靜態(tài)方法與動態(tài)方法-創(chuàng)新互聯(lián)
分享路徑:http://www.yijiale78.com/article30/dodhpo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、用戶體驗(yàn)、外貿(mào)建站、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容