Swift4 記憶體管理, 可選鏈, KeyPath

2022-08-18 04:30:15 字數 2480 閱讀 5471

建立: 2018/03/09

完成: 2018/03/09

參照型資料與arc

arc● swift裡,只有類例項與閉包例項是參照型

● 生成時參照值為1, 被代入等每次+1, 減少每次-1

● 為0執行deinit並自動釋放

● 判定例項是否相同 ===/!==

===運算子: 判定是否指向同乙個記憶體位置(類例項, 閉包例項)

!==: ===的否定

arc記憶體管理

用arc進行記憶體管理就是arc記憶體管理

強參照迴圈

例項無法釋放的情況

參照迴圈, 即多個屬性互相參照

解決方案就是下面兩條: 弱參照, 非所有參照

弱參照● 參照時被參照物的參照計數不會增加, 加 weak

必須是var, 因為被參照物被釋放時值自動改為nil

weak var sample: sampleclass

類例項必須至少有乙個強參照, 不然arc=0, 直接釋放

● 零化, 參照物被釋放時值自動改為nil

● 用法: 類內部的類例項屬性用weak, 防止迴圈參照

非所有參照(unowned reference)

● 參照時被參照物的參照計數不會增加, 加 unowned

● 和weak一樣, 但是不會零化

● 用法: 參照量不會變nil得情況下用unowned代替weak

類似於t!和t?

● 速度不重要時, 都用weak

xcode去表示參照關係 

執行專案後, [debug memory graph]按鈕

箭頭:  被參照物 <-- 參照物

可選鏈

可選鏈

a?.b?.c? //

a, b, c都非nil, 返回a.b.c

//任意乙個為nil, 返回nil

可選鏈撥出方法

前面有nil時方法不執行, 方法的引數是方法也不執行

a?.b?.c?.getsampledata(data: createdata(with: 1)) //

getsampledata(data:)和createdata(with:)都不執行

可選鏈的型

可選型別t?

a?.b?.c?.name //

string?

不用可選鏈時為t的, 用可選鏈為t?

不返回值的方法的情況 

不返回值的方法

//

三個返回的型相同

func sample1(...) //

省略返回的型

func sample2(...) -> () //

返回型 ()

func sample3(...) -> void //

返回型void

● 可選鏈下不返回值的方法的返回型

void?

作為條件

if a?.b?.c?.method(...) !=nil 

//相當於

if let _ = a?.b?.c?.method(...)

對可選鏈代入 

● 左側可選鏈取值失敗則不代入, 右側式子不會執行

● 左側可選鏈取值成功則可以代入

● 除了代入, 復合代入也一樣

key path

key path 

可選鏈那樣的參照迴路

\型名.路徑   //

\和型名間可以有空格, 路徑可以是可選鏈或其他屬性路徑

let keypath1 = \optionalchaintestclass.complexdata?.data

● 路徑內不能帶有方法名

● keypath的型

keypath《起點型, 獲取的型》

struct

sample

\sample.a

//型: keypath

用key path進行值的操作

● 獲取值

例項[keypath: keypath例項]

let keypath1 = \optionalchaintestclass.complexdata?.data

print(type(of: keypath1))

//keypath>

print(optionalchaintest[keypath: keypath1] ?? "

nil") //

nil

● 代入

例項[keypath: keypath例項] = 新值

Swift 十七 可選鏈

1 swift入門學習筆記 第一版 對swift的基礎知識點進行梳理總結。知識點一直在變,只是作為參考,以蘋果官方文件為準 2 在學習完基本的知識點以後會結合官方文件及相關資料,在此版本的基礎上進行新增更改。1.1 可選型別使用時需要解包,解包時需要判斷是否為nil,常用if語句判斷,再去訪問其屬性...

Swift 可選鏈 備

在swift程式表示式中會看到問號 和感嘆號 它們代表什麼含義呢?這些符號都與可選型別和可選鏈相關,下面來看看可選鏈。可選鏈 類圖 它們之間是典型的關聯關係類圖。這些類一般都是實體類,實體類是系統中的人 事 物。employee通過dept屬性與department關聯,department通過co...

學習Swift 可選鏈

可空鏈式呼叫是一種可以請求和呼叫屬性 方法及下標的過程,它的可空性體現於請求或呼叫的目標當前可能為空 nil 如果可空的目標有值,那麼呼叫就會成功 如果選擇的目標為空 nil 那麼這種呼叫將返回空 nil 多個連續的呼叫可以被鏈結在一起形成乙個呼叫鏈,如果其中任何乙個節點為空 nil 將導致整個鏈呼...