類是引用類型,結(jié)構(gòu)體是值類型。
值類型在傳遞和賦值時將進行復(fù)制,而引用類型則只會使用引用對象的一個指向。引用類型是在堆上,而值類型是在棧上進行存儲和操作。相比棧上的操作,對上的操作更加復(fù)雜耗時,所以蘋果官方推薦使用結(jié)構(gòu)體,這樣可以提高App運行的效率。
class有這幾個功能struct沒有的:
- class可以繼承,這樣子類可以使用父類的特性和方法。
- 類型轉(zhuǎn)換可以在runtime的時候檢查和解釋一個實例的類型。
- 可以用deinit來釋放資源。
- 一個類可以被多次引用。
struct也有這樣幾個優(yōu)勢:
- 結(jié)構(gòu)較小,適用于復(fù)制操作,相比于一個class的實例被多次引用更加安全。
- 無序擔(dān)心內(nèi)存泄漏或者多線程沖突問題。