值類型與引用類型的比較

在swift中定義類型方法有很多種,其中一種就是以,引用和值來區分的。具體定義如下:

●值類型(Value Types):每個實例都保留了一分獨有的數據拷貝,一般以結構體 (struct)、枚舉(enum) 或者元組(tuple)的形式出現。

●引用類型(Reference Type):每個實例共享同一份數據來源,一般以類(class)的形式出現。

至于如何具體的來區分和理解這兩者可以用一個具體的例子來表示。

##### 值類型

以值類型定義一個對象 ? let ?a: [String] = ["值類型"1,"值類型2"] ?(Array為值類型)

如果這時候重新聲明一個元素 ? var b: [String] = a ?(let ?和 var 對值類型和引用類型無影響,這里聲明為var是因為接下來會修改b的內容)

此時(不考慮swift做的優化)a與b應該是不同的對象,因為是拷貝,所以a與b內容是相同的,但是內存已經不同因為a與b已經是兩個完全不同的對象了(但是此時在代碼里測試時發現a與b地址還是一樣的,這是因為swift對值類型做過優化,copy之后只要不對b做修改,那么a和b仍為同一個對象,這樣做為了減少內存的消耗)。

這時候對b做修改? b.append("值類型3")? 此時b得知變為["值類型"1,"值類型2","值類型3"]而a任然是["值類型"1,"值類型2"] ?a并沒有跟著b的值而變化,此時a與b內存地址也不相同。

##### 引用類型

以引用類型定義一個對象 ?let c: UIView = UIView() (UIView為class引用類型)

將c賦值給d ?let d: UIView = c (對于引用類型的賦值沒有copy的,所以對象c和d為同一個對象,修改c或者d里面的值時,另一個對象里面對應的值也會跟著變化,因為這兩個本就是同一個對象)

總結,值類型和引用類型最大的區別就是復制時的變化。值類型是生成一個新的對象,而引用類型使用同一個對象。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Swift 介紹 簡介 Swift 語言由蘋果公司在 2014 年推出,用來撰寫 OS X 和 iOS 應用程序 ...
    大L君閱讀 3,304評論 3 25
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,254評論 4 61
  • 共同點: 都可以將多個數據封裝為一個整體 不同點: --1. 結構體只能封裝數據 類可以封裝行為--2.結構體在...
    LZM輪回閱讀 1,370評論 0 1
  • 老公的工作行業屬于傳統行業,在2013年的時候還順風順水,發錢多多。在這個二線的省會城市,日子過得風生水起...
    虛懷若谷_f16f閱讀 765評論 0 2
  • 在開往明月山的大巴上,看著道路向遠方延伸,心下涌起久違的感覺。又出來了,好幾個月了,由于身體一直不佳,周末經常侯在...
    身體棒棒閱讀 209評論 2 1