Swift之Struct數據模型

使用Struct作爲數據模型的優缺點

缺點

Objective-C

當你的項目的代碼是 Swift 和 Objective-C 混合開發時,你會發現在 Objective-C 的代碼裏無法調用 Swift 的 Struct。因爲要在 Objective-C 裏調用 Swift 代碼的話,對象需要繼承於 NSObject。

Struct 不是 Objective-C 的好朋友。

繼承

繼承是面向對象編程的四大支柱之一,這深深地植入了我們的思維方式。當我們可以使用繼承時,爲什麼還要重複地寫某一段代碼?我很喜歡把我的數據模型設爲可繼承的,這讓我不用給共享一個抽象的類重複 JSON 解析代碼,這能讓我的模型保持統一。

Struct 不能相互繼承。

NSUserDefaults

我敢打包票大家都會在某些時候對把數據存在 NSUserDefaults 裏面感到有罪惡感。這種想法很正常,因爲不是每個人都喜歡跟 CoreData 打交道,特別是僅僅要存很少的對象的時候。 技術上這是可行的,但是要用 Struct 實現的話,這還有幾個小坑要踩。因此你可能最好還是用 Class 來實現。

Struct 不能被序列化成 NSData 對象。


Struct 的優點

我不希望你們認爲我不喜歡使用 Struct 是因爲結構體傷了我的感情。使用 Struct 來代替 Class 作爲數據模型有很多好處。值類型(value type)是非常有優勢的:

  • 安全性

    因爲 Struct 是用值類型傳遞的,它們沒有引用計數。

  • 內存

    由於他們沒有引用數,他們不會因爲循環引用導致內存泄漏。

  • 速度

    值類型通常來說是以棧的形式分配的,而不是用堆。因此他們比 Class 要快很多,真的很多!在 StackOverflow 給 struct 和 class 進行相同操作的表現做了基準測試,Struct 比 Class 要快九百倍。(Struct 的速度爲 Class 的三千七百萬倍)

  • 拷貝

    你有在 Objective-C 裏試圖過拷貝一個對象嗎?你必須選用正確的拷貝類型(深拷貝、淺拷貝),這是非常煩人的,因爲每次嘗試你都不記得自己上次是怎麼寫的。 值類型的拷貝則非常輕鬆!

  • 線程安全

    值類型是自動線程安全的。無論你從哪個線程去訪問你的 Struct ,都非常簡單。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章