IOS中结构体(struct)
IOS中之struct(結(jié)構(gòu)體)
- 前言
- struct的基本語法
- struct 和class的區(qū)別
- class和struct比較,優(yōu)缺點(diǎn)?
- struct的優(yōu)勢
- 使用Struct和Protocol來實(shí)現(xiàn)model的繼承和共享
前言
-
引用類型: 賦值時(shí),系統(tǒng)不會(huì)對其對象拷貝,而是把指向該對象的指針(對象的地址值)賦值給另外一個(gè)對象,當(dāng)修改某個(gè)對象的值,會(huì)隨之影響另外一個(gè)對象的值
-
值類型: 賦值時(shí),系統(tǒng)會(huì)對此對象進(jìn)行拷貝,賦值出一份副本給另外一個(gè)對象,當(dāng)修改一個(gè)對象的值時(shí)不影響另外一個(gè)對象
在Swift中struct是屬于值類型,相對于其他語言來說,Swift的結(jié)構(gòu)體功能更加強(qiáng)大,它除了支持在結(jié)構(gòu)體聲明中基礎(chǔ)變量之外,它還支持在結(jié)構(gòu)體中聲明方法,這相對于其他語言來說,是swift的一個(gè)特性之一。
swift在本質(zhì)上來說是面向協(xié)議(Protocol Oriented)的語言,struct沒有也不需要繼承的功能,為了實(shí)現(xiàn)某個(gè)功能,struct去服從并實(shí)現(xiàn)某個(gè)協(xié)議就即可,從一個(gè)較高的層次來看,struct+protocol是構(gòu)成swift面向協(xié)議語言的兩個(gè)基石
- 為什么需要使用結(jié)構(gòu)體
- struct可保證代碼更加安全可靠,以及struct+protocol更加切合swift面向協(xié)議編程的初衷。
- struct 更快,簡單,安全,適合數(shù)據(jù)處理操作使用,在iOS開發(fā)中適合http請求的數(shù)據(jù)操作中使用。對于數(shù)據(jù)的處理解析和其他操作更快,更省內(nèi)存。
struct的基本語法
- 結(jié)構(gòu)中聲明變量,可以不用初始化值,但是calss中需要初始化值的
- Struct 會(huì)自動(dòng)生成一個(gè)初始化成員變量的構(gòu)造器方法,創(chuàng)建結(jié)構(gòu)體的時(shí)候調(diào)用構(gòu)造器方法賦值,但是class需要自己生成
- 如果你重寫了init()方法,系統(tǒng)不會(huì)幫你生成初始化構(gòu)造器方法了。
- struct中聲明方法,如果方法內(nèi)部修改了 struct中聲明property(屬性)值,方法前面必須加上 mutating關(guān)鍵字,如果沒有涉及到修改屬性值的話,就不需要mutating修飾,正常聲明實(shí)現(xiàn)方法即可
struct調(diào)用方法和類一樣,對象.方法名()
- 如果struct中聲明屬性時(shí),有一些屬性有初始化值,有一些沒有,那么系統(tǒng)會(huì)自動(dòng)生成兩種成員變量構(gòu)造器方法,一種是包括所有的成員變量,一種是只含有沒有初始化值的成員變量構(gòu)造器方法
struct對于let聲明的實(shí)例不能對變量進(jìn)行賦值,class預(yù)設(shè)值是可以賦值let實(shí)例的。注意Swift中常用的String、Array、 Dictionary都是struct。
struct 和class的區(qū)別
主要區(qū)別:
-
struct是值引用,而class是類型引用(各有好處值類型不用擔(dān)心內(nèi)存問題,但無法跨view完成同一個(gè)對象調(diào)用,只能是copy一份新對象使用。class 的內(nèi)存問題是需要程序要注意的,但是指針引用的強(qiáng)大毋庸置疑的。值類型是在棧空間上操作的,引用類型是在堆控件操作的)
-
struct沒有繼承的功能,class有繼承功能(struct不能像class 一樣繼承完成重用和多態(tài)。但是struct 可以通過組合和接口實(shí)現(xiàn)完成重用和多態(tài)。從這一點(diǎn)來說struct是比class有優(yōu)勢的)
-
定義結(jié)構(gòu)體struct類型時(shí)其成員變量可以沒有初始值(編譯器會(huì)自動(dòng)生成一個(gè)成員構(gòu)造器,給變量賦一個(gè)默認(rèn)值),如果使用這種格式定義一個(gè)類,編譯器會(huì)報(bào)錯(cuò),他會(huì)提醒你這個(gè)類沒有被初始化
class和struct比較,優(yōu)缺點(diǎn)?
class有一下功能,struct是沒有的:
- 1.class可以繼承,子類可以使用父類的特性和方法。但是struct是不能被繼承的
- 2.類型轉(zhuǎn)換可以在運(yùn)行時(shí)檢查和解釋一個(gè)實(shí)例對象
- 3.class可用 deinit來釋放資源
- 4.一個(gè)類可以被多次引用
struct的優(yōu)勢
- 結(jié)構(gòu)較小,適用于賦值操作,相比較一個(gè)class, 實(shí)例被多次引用(容易發(fā)生內(nèi)存泄漏),struct更安全
- 無需擔(dān)心內(nèi)存泄漏問題(struct的操作都是在棧控件上,class在堆控件上)
使用Struct和Protocol來實(shí)現(xiàn)model的繼承和共享
- 在項(xiàng)目中如何選擇Struct和Class
- 默認(rèn)使用Struct
- 當(dāng)你需要繼承Objective-C某些類的的時(shí)候使用class
- 當(dāng)你需要控制唯一性時(shí)使用class
- 我們使用struct和protocol來實(shí)現(xiàn)model繼承和共享行為
總結(jié)
以上是生活随笔為你收集整理的IOS中结构体(struct)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA毕业设计-智慧农业水果销售系统计
- 下一篇: 立志做中国市场TOP2,新华三云屏底气何