簡體   English   中英

為什么不能給一個無主常數一個初始值?

[英]Why can't I give an unowned constant an initial value?

class Example {}
unowned let first = Example()

產生錯誤:

Attempted to read an unowned reference but object 0x60c000005f20 was already deallocated

我試圖深入了解確切的關鍵字unowned做什么。

來自Swift編程語言

像弱引用一樣, 無主引用也不會對其引用的實例保持強大的控制力

您創建一個Example的新實例,然后將其first分配給您的未擁有的常量。 沒有任何東西可以很好地引用您的Example實例,因此可以立即將其釋放。 你無主常數first ,現在抱着這種重新分配的對象的引用,所以你得到你正試圖讀解分配的對象錯誤。

unowned關鍵字用於創建對對象的弱引用,在這里您可以保證所引用對象的生存期與引用對象相同。 這樣一來,您就可以避免避免引用循環,同時又無需拆開可選的包裝(如weak的情況)。

蘋果的文檔說

但是,與弱引用不同,當另一個實例具有相同的生存期或更長的生存期時,將使用無主引用。

在您的例子在那里,只要“ Example() ”之稱,您的new特性將被釋放( new是因為即便是一個屬性可怕的名字,哪怕只是一個演示:-)。

因此,這里可以工作的是:

class Example {}
let oneExample = Example() // properties are strong by default
unowned let theSameExample = oneExample

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM