一個小實驗驗證對象的指標計數置為nil的情況

來源:互聯網
上載者:User

本文轉載於新風作浪的部落格專欄,部落格地址:http://blog.csdn.net/duxinfeng2010/article/details/8757211

以下部落格原文:

 

最近遇到這樣一個問題,以前的時候並未注意;建立一個工程,然後添加一個類,檔案結構是這樣的

然後寫了這樣一小段程式,運行

- (*testObj =

 

明明release了,retainCount計數應該為0,但是 為什麼retainCount計數還是1,當我們release操作兩次的時候程式就崩潰了;

 

然後我們列印一下testObj對象

 

- (*testObj =

 

發現他們指向同一塊地址;

testObj 在alloc的時候在堆上申請到一片空間,然後它的retainCount計數為1,然後我們release之後,testObj指向的空間被銷毀了,不存在了。此時testObj就是一個野指標了;此時我們調用[testObj retainCount]就屬於一個不安全的做法;

 

然後我們在添加一行代碼,[testObj release]之後,添加 testObj = nil;

- (*testObj ==

唉,看到這裡就應該明白了吧,[testObj release] 後,testObj仍有指向,只是testObj原來指向的那片空間已被銷毀,但是本身還存在,通過置為nil這一步操作,就不在指向原來那片地址;應該記起viewDidUnload函數作用了吧,它就是幹這個活的,我們申明一個對象屬性的時候,在viewDidUnload中將這個屬性置為nil這一步操作;

 

提醒:在ios6.0之後viewDidUnload這個方法已經棄用了,那麼在哪裡將屬性置為nil哇,我現在是很糾結是否在dealloc釋放和置屬性為nil的。 不知道網友們是怎麼做的

 

個人小結下:看這結果似乎是原對象釋放,但是沒有置為nil的時候原對象請求的空間因為有這個指標指著計數仍然為1,而只有在置為nil之後才會釋放的樣子。0.。0

不知道是不是這樣子說。。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.