swift的一些面試題

圖片描述

1、open與public的區別

  • public:能夠別任何人訪問,可是不能夠被其餘module複寫和繼承。
  • open:能夠被任何人訪問,能夠被繼承和複寫。

2、struct與class 的區別

  • struct是值類型,class是引用類型html

    • 值類型的變量直接包含它們的數據,對於值類型都有它們本身的數據副本,所以對一個變量操做不可能影響另外一個變量。
    • 引用類型的變量存儲對他們的數據引用,所以後者稱爲對象,所以對一個變量操做可能影響另外一個變量所引用的對象。
    • 兩者的本質區別:struct是深拷貝,拷貝的是內容;class是淺拷貝,拷貝的是指針
  • property的初始化不一樣:class 在初始化時不能直接把 property 放在 默認的constructor 的參數裏,而是須要本身建立一個帶參數的constructor;而struct能夠,把屬性放在默認的constructor 的參數裏。
  • 變量賦值方式不一樣:struct是值拷貝;class是引用拷貝。
  • immutable變量:swift的可變內容和不可變內容用var和let來甄別,若是初始爲let的變量再去修改會發生編譯錯誤。struct遵循這一特性;class不存在這樣的問題
  • mutating function: struct 和 class 的差別是 struct 的 function 要去改變 property 的值的時候要加上 mutating,而 class 不用。
  • 繼承: struct不能夠繼承,class能夠繼承。
  • struct比class更輕量:struct分配在棧中,class分配在堆中。

3、swift把struct做爲數據模型

3.1優勢

  1. 安全性: 由於 Struct 是用值類型傳遞的,它們沒有引用計數。
  2. 內存: 因爲他們沒有引用數,他們不會由於循環引用致使內存泄漏。
  3. 速度: 值類型一般來講是以棧的形式分配的,而不是用堆。所以他們比 Class 要快不少!
  4. 拷貝:Objective-C 裏拷貝一個對象,你必須選用正確的拷貝類型(深拷貝、淺拷貝),而值類型的拷貝則很是輕鬆!
  5. 線程安全: 值類型是自動線程安全的。不管你從哪一個線程去訪問你的 Struct ,都很是簡單。

3.2 缺點

  1. Objective-C與swift混合開發:OC調用的swift代碼必須繼承於NSObject。
  2. 繼承:struct不能相互繼承。
  3. NSUserDefaults:Struct 不能被序列化成 NSData 對象。

參考文章

Swift 淺談Struct與Classswift

相關文章
相關標籤/搜索