1. 程式人生 > >strong and weak 強引用和弱引用的區別

strong and weak 強引用和弱引用的區別

(weak和strong)不同的是 當一個物件不再有strong型別的指標指向它的時候 它會被釋放  ,即使還有weak型指標指向它。

一旦最後一個strong型指標離去 ,這個物件將被釋放,所有剩餘的weak型指標都將被清除。

可能有個例子形容是妥當的。

想象我們的物件是一條狗,狗想要跑掉(被釋放)。

strong型指標就像是栓住的狗。只要你用牽繩掛住狗,狗就不會跑掉。如果有5個人牽著一條狗(5個strong型指標指向1個物件),除非5個牽繩都脫落 ,否著狗是不會跑掉的。

weak型指標就像是一個小孩指著狗喊到:“看!一隻狗在那” 只要狗一直被栓著,小孩就能看到狗,(weak指標)會一直指向它。只要狗的牽繩脫落,狗就會跑掉,不管有多少小孩在看著它。

只要最後一個strong型指標不再指向物件,那麼物件就會被釋放,同時所有的weak型指標都將會被清除。

strong就相當於retain屬性,而weak相當於assign。只有一種情況你需要使用weak(預設是strong),就是為了避免retain cycles(就是父類中含有子類{父類retain了子類},子類中又呼叫了父類{子類又retain了父類},這樣都無法release)