2012-04-17 62 views
0

我有一個關於內存的問題。根據代碼&下面的日誌,是0x6868190有泄漏嗎?objective-c內存泄漏?

代碼:

self.point = [NSString stringWithFormat:@"R"]; 
NSLog(@"********First********%d",[point retainCount]); 
NSLog(@"********First********%p",point); 
self.point = [NSString stringWithFormat:@"A"]; 
NSLog(@"********Second********%d",[point retainCount]); 
NSLog(@"********Second********%p",point); 

日誌:

2012-04-17 20:27:49.838 test_[297:f803] ********First********2 
2012-04-17 20:27:49.838 test_[297:f803] ********First********0x6868190 
2012-04-17 20:27:49.839 test_[297:f803] ********Second********2 
2012-04-17 20:27:49.839 test_[297:f803] ********Second********0x6879500 
+0

請將代碼格式添加到您的帖子中。 – mit3z 2012-04-17 12:41:43

+5

如果您試圖通過記錄保留計數來了解內存管理,那麼您就錯了。 – 2012-04-17 12:41:54

+1

@麥克威勒的評論不能被誇大。只是忘記保留數量,它不會做你認爲它的作用。用蘋果公司文件的話來說:「你很難從這種方法中獲得有用的信息。」 – sosborn 2012-04-17 12:44:59

回答

1

使用儀器檢查內存泄漏。事實上,保留計數不爲零(或者我猜你在等待1)並不一定意味着有泄漏。如有必要,這些對象將在運行循環結束時釋放。

stringWithFormat調用將創建一個保留計數爲1的對象(它將被自動釋放)。然後你的屬性可能被聲明爲retain/strong,這會增加一個當你的主對象被釋放時會被釋放。因此它是兩個。

+0

謝謝你幫助我!我有進一步的瞭解。 – user1297301 2012-04-17 13:05:17

0

號由所述NSString類生成的那些NSString s爲autorealeased

2

請勿使用retainCount檢查內存泄漏,因爲內部實現可能會改變它,因爲您不會期望。

xcode有檢查泄漏的適當工具,所以我建議你使用它。

1

我的網站「When to use retainCount?」涵蓋了這個。見問題七和八。

但總之,沒有。你的變量是自動釋放的,所以它不會泄漏(除非你忘記在dealloc發佈)。