![](/img/trans.png)
[英]Why can Apple declare optional protocol funcs without @objc, and unowned optional variables, but I can't?
[英]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.