中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

IOS如何實現靜態方法與動態方法

發布時間:2021-07-09 09:21:15 來源:億速云 閱讀:229 作者:小新 欄目:移動開發

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

IOS 靜態方法與動態方法詳解

1、問題提出

     iOS中有靜態方法與動態方法,那么兩種方法的異同是什么?

2、問題分析

     因為每個對象都由相應的數據結構與方法相構成,一個程序可能有多個屬于同一個類的對象,而每個對象的數據結構應該是不一的,但方法是相同的,若為每個對象開辟內存空間來存儲方法,必然是對內存空間極大的浪費。因此apple是通過類對象與元類來解決這個問題的。

     從根本來說,c++、objective-c、java都發源于c語言,因此這些語言實際上可以理解了經過封裝的c語言,所以它們更加方便使用但效率不如c語言。

     因此,對象的底層實際上就是結構體,其有兩個重要的指針,一個是isa指針,一個是super指針。

     isa指針:負責指向類對象,用來表明自己是什么類類型,并能調用類對象中的動態方法。

     super指針:表示對象的繼承關系,指向父類,從而能調用父類的相應方法。

     類對象:類對象是由元類生成的對象,負責存儲動態方法,動態方法在編譯器是不確定的,因此編譯器也無法檢測與動態方法相關的錯誤,動態方法的調用是在運行期中通過消息機制來執行的,因此也只有運行期才會報錯。                      

     元類:元類是用來存儲靜態方法列表的,編譯器能檢測。

     其整體關系如下圖所示:

IOS如何實現靜態方法與動態方法

  結論

          兩者的差異包括:(1)方法列表是區分開的,分別存儲在類對象與元類中。
                                       (2)動態方法是在運行期中調用,編譯器無法檢測錯誤,靜態方法是在編譯器就確定,編譯器能檢測錯誤。
                                       (3)動態方法由對象調用,靜態方法由類調用,因為調用方法是通過isa和super指針實現的。因此對象只能調用類對象的方法,而類對像能調用元類的方法。

3、相關代碼

     (1)靜態、動態方法創建對象 

        大部分類的靜態方法與動態方法中都存在相應的方法可以用于創建對象,除了兩者的本質差別,兩者的結果是無差異的,都是在堆中創建一個對象的內存,并初始化好各種功能指針。 所以更加推薦使用靜態方法創建對象,方便編譯器檢查錯誤和代碼風格更簡潔。從以下代碼的結果(注釋)中可得驗證以上結論。

//tset --靜態方法與動態方法區別探究
  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"

感謝你能夠認真閱讀完這篇文章,希望小編分享的“IOS如何實現靜態方法與動態方法”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

ios
AI

叶城县| 双峰县| 大足县| 涟水县| 醴陵市| 郯城县| 松滋市| 北辰区| 竹山县| 博湖县| 淮阳县| 天祝| 云阳县| 亳州市| 剑阁县| 沿河| 七台河市| 永川市| 迭部县| 海城市| 利辛县| 舒城县| 玉环县| 汶上县| 平阴县| 汪清县| 耿马| 泸定县| 天长市| 牡丹江市| 准格尔旗| 台湾省| 云阳县| 葫芦岛市| 大宁县| 靖远县| 隆子县| 常山县| 黄平县| 铁岭市| 黑水县|