2012-11-24 30 views
1

我發現[object_name retain]將對象引用計數增加1,[object_name release]將對象引用計數減1。[pool drain]對所引用的所有對象應用釋放。引用計數設置爲零時是否釋放內存?

現在我很困惑。當沒有引用它時,對象會發生什麼? releasedrain只是減少引用計數,所以內存實際上釋放零引用計數還是我仍然有一個零引用計數的對象?

我還發現,如果在這裏

[pool drain] //讓我的對象STR3引用計數零

NSLog(@"%li",[str3 length]); //它的工作原理,對象可能尚未銷燬!

//此處爲其他代碼

[pool drain]

//此處爲其他代碼

NSLog(@"%li",[str3 length]); //不工作,可現在是毀滅!

+2

閱讀Apple's * [Cocoa Core Competencies](http://developer.apple.com/library/ios/documentation/general/conceptual/DevPedia-CocoaCore/MemoryManagement.html#//apple_ref/doc/uid/TP40008195 -CH27-SW1)*。這裏有很多重要的信息,例如:「當保留計數變爲零時,對象被解除分配(銷燬)。」 –

+0

我明白了......系統自動調用dealloc方法來釋放內存空間計算零參考! ,請大家爲我們的觀點! – BaSha

回答

0

我認爲這個對象在零保留計數後會被銷燬,不能再使用了。更多請參考here

+0

是的..但有沒有什麼辦法來檢查我的對象是從內存釋放? ,因爲我仍然可以使用具有零引用計數的對象調用實例方法retainCount。 – BaSha

5

當沒有強引用時(即釋放將其保留計數降至0時),將釋放對象。

但請記住,-retainCount方法是無用的,您不應該調用它。

+1

re:有關使用'retainCount'的建議,我發現以下網站有用[[whentouseretaincount.com] – FluffulousChimp

+1

因爲我們調用[object_name retainCount],所以它是實例方法,現在if我的對象被釋放爲零參考。計數,我仍然可以調用retainCount方法? – BaSha

+1

@b_n_​​s:將消息發送到釋放對象是未定義的行爲。這意味着任何事情都可能發生。它可能看起來好像該對象仍然存在。它可能看起來像你正在傳遞一個*不同的對象。你的程序可能會直接崩潰。可能還有其他的東西。發生的事情幾乎是一個廢話。在你的測試中,它看起來像對象還在,但那是因爲你調用了未定義的行爲。這不會可靠地發生。 – Chuck

相關問題