iOS strong和weak聯絡生活中的例子

來源:互聯網
上載者:User

標籤:

 __weak 和 __strong 會出現在聲明中


預設情況下,一個指標都會使用 __strong屬性,表明這是一個強引用。這意味著,只要引用存在,對象就不能被銷毀。這是一種所期望的行為:當所有(強)引用都去除時,對象才能被收集和釋放。
不過,有時我們卻希望禁用這種行為:一些集合類不應該增加其元素的引用,因為這會引起對象無法釋放。在這種情況下,我們需要使用弱引用(不用擔心,內建的集合類就是這麼乾的),使用 __weak 關鍵字。NSHashTable 就是一個例子。當被引用的對象消失時,弱引用會自動化佈建為nil。Cocoa 的 Notification Center 就是這麼一個例子,雖然這已經超出純 Objective-C的語言範疇 

自己更深理解:1.(weak與strong)不同的是:當一個對象不再有strong類型的指標指向它的時候,它就會被釋放,即使改對象還有_weak類型的指標指向它;
 2.一旦最後一個指向該對象的strong類型的指標離開,這個對象將被釋放,如果這個時候還有weak指標指向該對象,則會清除掉所有剩餘的weak指標

類比為自己的思想:     一個對象類比為一條狗,  釋放對象 類比為 狗要跑掉
邏輯:    strong類型的指標就像是栓住的狗,只要你用繩子拴住狗,那麼狗就不會跑掉.    類比 一個對象new過以後,不會自動的釋放
  如果有5個人都牽著這一條狗(5條繩子栓一隻狗) 類比為5個strong類型指標指向一個對象.除非5個繩子都脫落,否則狗是不會跑掉的,類比,5個strong指標都=nil,則該對象釋放


weak型指標就像是一個小孩子指著狗喊道:“看,有一隻狗在那裡”,只要狗一直被拴著,那麼小孩子就能看到狗(weak指標)會一直指向它,      只要狗的繩子脫落,那麼狗就會跑掉,不管有多少的小孩在看著它。
只要最後一個strong型指標不再指向對象,那麼對象就會被釋放,同時所有的weak型指標都將會被清除。
在OC中strong就相當於retain屬性,而weak相當於assign。只有一種情況你需要使用weak(預設是strong),就是為了避免retaincycles(就是父類中含有子類{父類retain了子類},子類中又調用了父類{子類又retain了父類},這樣都無法release)

iOS strong和weak聯絡生活中的例子

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.