1. 程式人生 > >iOS靜態方法與動態方法

iOS靜態方法與動態方法

  1. 問題提出
  2. 問題分析
  3. 相關程式碼
1、問題提出      iOS中有靜態方法與動態方法,那麼兩種方法的異同是什麼? 2、問題分析      因為每個物件都由相應的資料結構與方法相構成,一個程式可能有多個屬於同一個類的物件,而每個物件的資料結構應該是不一的,但方法是相同的,若為每個物件開闢記憶體空間來儲存方法,必然是對記憶體空間極大的浪費。因此apple是通過類物件與元類來解決這個問題的。      從根本來說,c++、objective-c、java都發源於c語言,因此這些語言實際上可以理解了經過封裝的c語言,所以它們更加方便使用但效率不如c語言。      因此,物件的底層實際上就是結構體,其有兩個重要的指標,一個是isa指標,一個是super指標。
     isa指標:負責指向類物件,用來表明自己是什麼類型別,並能呼叫類物件中的動態方法。      super指標:表示物件的繼承關係,指向父類,從而能呼叫父類的相應方法。      類物件:類物件是由元類生成的物件,負責儲存動態方法,動態方法在編譯器是不確定的,因此編譯器也無法檢測與動態方法相關的錯誤,動態方法的呼叫是在執行期中通過訊息機制來執行的,因此也只有執行期才會報錯。                            元類:元類是用來儲存靜態方法列表的,編譯器能檢測。      其整體關係如下圖所示:
     結論           兩者的差異包括:(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靜態方法動態方法

問題提出問題分析相關程式碼 1、問題提出      iOS中有靜態方法與動態方法,那麼兩種方法的異同是什麼? 2、問題分析      因為每個物件都由相應的資料結構與方法相構成,一個

方法呼叫之靜態分派動態分派

靜態分派與動態分派 靜態分派 自動轉型按照 char > int > long > float > double 如下面案例所示: public class Test { public static void sayH

C++靜態動態庫、建立及呼叫方法

1 什麼是庫 庫是寫好的現有的,成熟的,可以複用的程式碼。現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的程式碼都從零開始,因此庫的存在意義非同尋常。本質上來說庫是一種可執行程式碼的二進位制形式,可以被作業系統載入記憶體執行。庫有兩種:靜態庫(.a、.lib)和動態

struts2.5+框架使用通配符動態方法

round ret extend turn pro 一個 span ucc 方法  概述:struts2.5以後加強了安全性,下面就是安全配置引發的問題 通配符: 在學習struts框架時經常會使用到通配符調用方法,如下: <package

Java | 基礎歸納 | 靜態方法例項方法的區別

靜態方法和例項方法的區別主要體現在兩個方面: 在外部呼叫靜態方法時,可以使用"類名.方法名"的方式,也可以使用"物件名.方法名"的方式。而例項方法只有後面這種方式。也就是說,呼叫靜態方法可以無需建立物件。 靜態方法在訪問本類的成員時,只允許訪問靜態成員(即靜態成員變數和靜態方法),而不允許訪問例項成員變數

struts2.5框架使用萬用字元動態方法

 概述:struts2.5以後加強了安全性,下面就是安全配置引發的問題 萬用字元: 在學習struts框架時經常會使用到萬用字元呼叫方法,如下: <package name="usercrud" namespace="/" extends="struts-default">

Python類方法靜態方法例項方法

@classmethod類方法 除靜態方法與類方法外,類的其他方法都屬於例項方法。 類方法: 方法中的self是類本身 只能訪問類變數,不能訪問例項變數不能訪問例項變數 即可通過類呼叫也可以通過例項呼叫 >>> class person

iOS 靜態庫,動態 Framework 淺析

靜態庫與動態庫的區別 首先來看什麼是庫,庫(Library)說白了就是一段編譯好的二進位制程式碼,加上標頭檔案就可以供別人使用。 什麼時候我們會用到庫呢?一種情況是某些程式碼需要給別人使用,但是我們不希望別人看到原始碼,就需要以庫的形式進行封裝,只暴露出標頭檔案。另外

IOS-靜態庫,動態 Framework

靜態庫與動態庫的區別 首先來看什麼是庫,庫(Library)說白了就是一段編譯好的二進位制程式碼,加上標頭檔案就可以供別人使用。 什麼時候我們會用到庫呢?一種情況是某些程式碼需要給別人使用,但是我們不希望別人看到原始碼,就需要以庫的形式進行封裝,只暴露出標頭

靜態方法普通方法

1.靜態方法 靜態方法和靜態屬性的引用方法 例如 class Test{ public static $test = 1; public static function test(){ } } 可以不用例項化物件 靜態變數直接使用 Test::$test

java靜態方法成員方法及成員變數的區分

面向物件程式設計中,通常用類建立的物件的過程稱為例項化; 類是指描述一種事物的定義,是抽象的概念,是一類事物具有相同的特徵的集合,類是物件的模板; 例項是指:該種事物的具體的一個個

ios開發中類方法例項方法區別 以及self有什麼不同

Objective-C裡面既有例項方法也類方法。類方法(Class Method) 有時被稱為工廠方法(Factory Method)或者方便方法(Convenience method)。工廠方法的稱謂明顯和一般意義上的工廠方法不同,從本質上來說,類方法可以獨立於物件而執行,所以在其他的語言裡面類方法有的

Java靜態分派動態分派(二)

xiang oid main isp 準備 center 使用 name 編譯過程 方法調用並不等於方法執行,方法調用階段唯一的任務就是確定被調用方法的版本(即調用哪一個方法),暫時還不涉及方法內部的具體運行過程。 在程序運行時,進行方法調用是最普遍、最頻繁的操作,但是Cl

Java靜態代理動態代理模式的實現

loader 兩個 如何 圖片 ide 相同 catch 規範 png 前言: 在現實生活中,考慮以下的場景:小王打算要去租房,他相中了一個房子,準備去找房東洽談相關事宜。但是房東他很忙,平時上班沒時間,總沒有時間見面,他也沒辦法。後來,房東想了一個辦法,他找到了一個

java static 方法普通方法區別

對象 static 方法區 修改 需要 總結 資源 其他 一個  static 方法不需要實例化,靜態方法在JVM剛加載的時候就編譯過了.在程序的運行過程中隨時可以調用,不需要去實例化某個對象然後再去調用,可以直接用類名去調用,直到結束釋放內存,且靜態方法只能調用類靜態變量

struts1——靜態ActionForm動態ActionForm

mpp fas yarn prop dsd nqa oar bnf npc 在struts1中,我們能夠使用ActionForm來獲取從client端提交上來的數據。並通過action配置中的name屬性。將某個ActionForm配置到某次請求應答的Act

靜態動態庫的簡單說明

外部程序 endif ldconfig 開始 director 有時 鏈接 現在 con   一.靜態庫和動態庫的簡單介紹   程序設計的模塊化是人們一直在追求的目標,因為當一個系統十分復雜的時候,將系統模塊化既可以並行開發,又可以增強程序的可用性,降低程序間的耦合度。在一

JavaScript中的Boolean 方法Number方法

charat trac class text art body div SDR ... <html> <head> <script type="text/javascript"> //創建 var str

搜索系統7:索引查詢方法評價方法

如果 介紹 多個 一次 它的 存儲 標題 搜索系統 角度 一、 多條件的查詢方法: 之前已經介紹過倒排索引的結構。在查單個詞的時候比較簡單,直接查從索引裏找是否有這個詞對應的文檔列表就行了。但如果條件是and、or、not這樣的條件,怎麽處理呢? and:對多個條件分別取文

靜態分析動態分析

組織 整體 靜態分析 nbsp 驗證 分析 分開 關註 依靠 靜態分析關註系統的要素和組織(聯系);強調的是部分如何組成整體;著重於要素的局部聯系。 動態分析關於於系統的功能:前調的是要素與聯系如何組成鏈條,完成事務的處理。 動態分析依靠靜態分析支持; 靜態分析依靠動態