2016-11-24 55 views
0

在以下示例中,localVariable的範圍是什麼?附加到全局數組的局部變量的作用域是什麼?

對象是anArray[0] === localVariablelocalVariable是否會一直存在,直到Example超出範圍(從哪裏構建)?

class Example { 
    var anArray: [DataClass] = [] 

    init() { 
     let localVariable = DataClass() 
     anArray.append(localVariable) 
    } 
} 

class DataClass { } 
+0

初始化程序完成後,localVariable將不再存在。但是它的價值仍然在anArray內部保持活躍。 DataClass的實例只有在沒有人再引用時纔會被釋放 - 這意味着一旦Example實例被釋放,DataClass也會被釋放(如果沒有人從外部訪問anArray並檢索其值) – luk2302

+0

你能解釋一下你遇到的問題?有問題還是隻是好奇? – Jelle

+0

@ luk2302我認爲你是對的 - 但你對'價值'的表述關注我。因爲它是一個類,我相信對象的實際引用將被複制。 – sdasdadas

回答

1

它添加到陣列將遞增保留計數,所以是,它會存在,直到陣列被破壞時(當例如實例被移除),除非它被添加到一些其它變量/陣列/組/參考其他地方。

+1

謝謝,這就是我以後的! – sdasdadas

+1

只是一個小小的警告:保留週期或自引用可能會使對象比預期的或預期的更長(或永遠)活着。例如。使用閉包(塊)或定時器或非弱代表時可能會發生這種情況。 – Jelle